GitHub

https://github.com/Choidongjun0830

파이썬 알고리즘 문제 풀이

Baekjoon Online Judge 10451번 파이썬

gogi masidda 2022. 8. 4. 14:54

문제 링크
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


배열의 인덱스 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