티스토리 뷰

반응형

 문제

 

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를 통해 visited를 갱신하며 새로운 visited를 찾을 때 cnt를 갱신해준다. 

 

 

 

 

 

 

 코드

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sys import stdin, setrecursionlimit
input = stdin.readline
setrecursionlimit(100000)
def dfs(start, adjacent, visited):
    if visited[start] is False:
        visited[start] = True
        dfs(adjacent[start], adjacent, visited)
for _ in range(int(input())):
    N = int(input())
    adjacent = [0+ list(map(int, input().split()))
    visited = [True+ [False* (N)
    cnt = 0
    for i in range(1, N+1):
        if visited[i] is False : 
            cnt += 1 
            dfs(i, adjacent, visited)
    print(cnt)
cs

 

 

 

 

 

 

 

 새로 학습한 것 & 실수 

 

- 굳이 parameter가 아니여도 def에서 사용하는 변수명이 def 이전에 선언 되어있으면 직접적으로 변하게 할 수 있다.

 

 

 

 

 

 

 

반응형
댓글