처음엔 dfs 를 떠올리지 않고
반복문만으로 해결하려고 했으나,,
하다보니 재귀로 하는 게 더 편할 것 같아서
노선 변경!!
런타임 에러가 나서
sys.setrecursionlimit(2000)으로
최대 재귀를 늘려주었더니 해결!
dfs 를 이용해서 문제를 풀어주었음!
visited는 방문한 노드의 리스트를 저장해두는 리스트
circle은 현재 서클에 해당하는 리스트
import sys
sys.setrecursionlimit(2000)
for _ in range(int(input())):
n = int(input())
array = list(map(int, input().split()))
array.insert(0,0)
visited = set()
answer = 0
idx = 1
def dfs(node, circle):
global answer
if node in circle:
answer += 1
return
if node in visited:
return
visited.add(node)
circle.add(node)
dfs(array[node],circle)
circle.remove(node)
for i in range(1,n+1):
dfs(array[i], set())
print(answer)
'여니의 취준 준비 > 코딩테스트 (Python)' 카테고리의 다른 글
[1309] 동물원 in python (0) | 2022.01.08 |
---|---|
[2644] 촌수 계산하기 in python (0) | 2022.01.08 |
[2512] 예산 in python [이분탐색] (0) | 2022.01.04 |
[1057] 토너먼트 in python (0) | 2022.01.04 |
[n11899] 괄호 끼워넣기 in python (0) | 2021.11.25 |