백준 python 기록

백준 10451 파이썬 순열 사이클

작지 2021. 10. 13. 10:31

백준 링크:https://www.acmicpc.net/problem/10451

 

10451번: 순열 사이클

1부터 N까지 정수 N개로 이루어진 순열을 나타내는 방법은 여러 가지가 있다. 예를 들어, 8개의 수로 이루어진 순열 (3, 2, 7, 8, 1, 4, 5, 6)을 배열을 이용해 표현하면 \(\begin{pmatrix} 1 & 2 &3&4&5&6&7&8 \\  3

www.acmicpc.net

문제가 뭔말인지 조금 햇갈려서 고생했다. 간단한 dfs문제였는데ㅜㅜ

 

 

dfs를 사용해서 카운트 숫자를 하나씩 늘려주었다. 

다만 sys.setrecursionlimit를 안하면 오류가 나기때문에 대충 100만정도 설정했다.

 

import sys
sys.setrecursionlimit(1000000)
input = sys.stdin.readline

tc=int(input())
for i in range(tc):
    n=int(input())
    s=list(map(int,input().split()))
    visited=[0]*n
    cnt = 0

    def dfs(x,visit):

        visit.append(x)
        visited[x] = 1
        if s[x]-1 not in visit and visited[s[x]-1] == 0:
            dfs(s[x]-1,visit)


    for j in range(n):
        if visited[j] == 0:
            dfs(j,[])
            cnt += 1
    print(cnt)