백준 10451 순열 사이클

김민영·2023년 1월 12일
0

알고리즘

목록 보기
65/125

과정

  • 1차원 DFS를 사용했습니다.
  • 리스트로 입력 받아서, 인덱스에 맞게 그래프로 옮기는 작업을 했습니다. 이 때 인풋은 1부터 시작하지만, 인덱스는 0부터 시작한다는 점에 주의해서 입력 받습니다.
import sys
input = sys.stdin.readline

tc = int(input())
for _ in range(tc):
    N = int(input())
    graph = [[] for _ in range(N+1)]
    lst = list(map(int, input().split()))
    for i in range(N):
        graph[i+1].append(lst[i])
        graph[lst[i]].append(i+1)

    visited = [False] * (N+1)
    def dfs(x, graph, visited):
        visited[x] = True
        for i in graph[x]:
            if not visited[i]:
                dfs(i, graph, visited)

    ans = 0
    for i in range(1, N+1):
        if not visited[i]:
            dfs(i, graph, visited)
            ans += 1
    print(ans)
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글