코딩 테스트 준비

순열 싸이클 - 실버 3

개발쉐발 2023. 1. 4. 13:10
728x90
반응형
import sys
sys.setrecursionlimit(10**7)

def dfs(x, sig):
  sig[x] = True
  if sig[cycle[x]] == False:
    dfs(cycle[x], sig)
    
for i in range(int(input())):
  N = int(input())
  cycle = [0] + list(map(int,input().split()))
  sig = [False] * (N+1)
  ans = 0
  for i in range(1, len(cycle)):
    if sig[i] == False:
      dfs(cycle[i], sig)
      ans +=1
  print(ans)

재귀에 대한 제한을 풀어주는게 포인트이며 bfs로도 풀이가 가능하지만 직관적인 dfs를 택했다.

해당 문제는 인덱스와 그 안의 요소를 연결시키는 것을 이해하는게 포인트이며 비슷한 유형이 쉽게 나올 수 있으니

꼭 기억해두자.

728x90
반응형