STUDY/Algorithm

[백준] 9466 텀 프로젝트 python

sinawi95 2021. 5. 18. 21:24
728x90
import sys; input = sys.stdin.readline
sys.setrecursionlimit(10**7)

def dfs(node):
    global result
    visit[node] = 1
    cycle.append(node)
    stu = st[node]

    if visit[stu]:
        if stu in cycle:
            result += cycle[cycle.index(stu):]
        return
    dfs(stu)


for tc in range(int(input())):
    n = int(input())
    st = [-1] + list(map(int, input().split()))
    visit = [False] * (n + 1)
    result = []
    for i in range(1, n+1):
        if not visit[i]:
            cycle = []
            dfs(i)

    print(n - len(result))

재귀 DFS로 푸는 문제이다

가장 약한 재귀 DFS...

쉬운 그래프 탐색 문제로 재귀 좀 공부 해야겠다.

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 1541 잃어버린 괄호 python  (0) 2021.05.26
[백준] 2668 숫자고르기 python  (0) 2021.05.20
[백준] 1992 쿼드트리 python  (0) 2021.05.18
[백준] 2750 수 정렬하기 C  (2) 2021.05.18
[백준] 14500 테트로미노 python  (0) 2021.05.18