프론트엔드 개발자 중규리 입니다 ദി ᷇ᵕ ᷆ ) 자세히보기

PS/문제풀이

백준 2668 숫자고르기 Python

중규리 2024. 2. 5. 14:17

🐸 문제 정보

 

2668번: 숫자고르기

세로 두 줄, 가로로 N개의 칸으로 이루어진 표가 있다. 첫째 줄의 각 칸에는 정수 1, 2, …, N이 차례대로 들어 있고 둘째 줄의 각 칸에는 1이상 N이하인 정수가 들어 있다. 첫째 줄에서 숫자를 적절

www.acmicpc.net

 

🤖 알고리즘

DFS

 

⏱️ 풀이 시간

38.36m

 

📝 풀이

cycle을 찾으면 되는 문제인 것은 알겠으나...

구현하는 것이 생각보다 어려웠던 문제였다ㅠㅠ

 

DFS로 푸는데, 이번에 확인할 노드를 인자로 전달 받아서,

시작했던 노드와 다시 만나면 res에 해당 노드를 넣어주는 방식으로 풀었다.

 

🧑‍💻 나의 답

# pypy3

import sys
input = sys.stdin.readline

n = int(input().rstrip())
graph = [0] + [int(input().rstrip()) for _ in range(n)]
res = []

def dfs(cur):
    global start
    visited[cur] = True
    next = graph[cur]
    if not visited[next]:
        dfs(next)
    elif visited[next] and (next == start):
        res.append(next)
        return

for i in range(1, n + 1):
    visited = [False] * (n + 1)
    start = i
    dfs(i)

print(len(res))
print(*sorted(res), sep='\n')