문제 링크
https://www.acmicpc.net/problem/10451
배열의 인덱스 1,2,3,…을 이용하는 것이라서 graph를 따로 만들어서 풀 필요가 없었다.
dfs를 한번 실행했어도 방문하지 않은 노드가 남아있는 것이라면 순열 사이클의 개수가 더 남아있는 것이다.
정답 코드
import sys
sys.setrecursionlimit(10 ** 6)
T = int(sys.stdin.readline())
def dfs(start):
visited[start] = True
next = nodes[start]
if not visited[next]:
dfs(next)
for i in range(T):
N = int(sys.stdin.readline())
graph = [[] for i in range(N+1)]
nodes = [0] + list(map(int,sys.stdin.readline().split()))
visited = [False] * (N+1)
result = 0
for i in range(1,N+1):
if not visited[i]:
dfs(i)
result += 1
print(result)
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
Baekjoon Online Judge 9466번 파이썬 (0) | 2022.08.05 |
---|---|
Baekjoon Online Judge 2331번 파이썬 (0) | 2022.08.04 |
Baekjoon Online Judge 1707번 파이썬 (0) | 2022.08.02 |
Baekjoon Online Judge 11724번 파이썬 (0) | 2022.08.01 |
Baekjoon Online Judge 1260번 파이썬 (0) | 2022.08.01 |