코딩하는 해맑은 거북이

[Python] 순열 사이클 - 백준 (BFS) 본문

코딩테스트

[Python] 순열 사이클 - 백준 (BFS)

#CJE 2022. 12. 26.
해당 글은 백준 10451번 문제 '순열 사이클'을 다룬다.

문제

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

 

설명

BFS로 계속해서 순환하여 사이클을 개수를 구하는 문제이다.

방문하지 않았다면 bfs 함수를 돌아서 사이클을 확인하고, 방문했다면 이미 포함된 사이클이 있으므로 넘어간다.

 

코드

from collections import deque

def bfs(x):
    queue = deque([x])
    visited[x] = True
    while queue:
        x = queue.popleft()
        nx = arr[x]
        if visited[nx] != True:
            queue.append(nx)
            visited[nx] = True

T = int(input())
for t in range(T):
    n = int(input())
    arr = [0]+list(map(int, input().split()))
    visited = [False]*(n+1)
    result = 0
    for i in range(1, n+1):
        if visited[i] != True:
            bfs(arr[i])
            result += 1
    print(result)

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 문자열 - 백준  (0) 2022.12.29
[Python] 숫자 정사각형 - 백준  (0) 2022.12.26
[Python] 시리얼 번호 - 백준 (정렬)  (0) 2022.12.25
[Python] 문서 검색 - 백준  (0) 2022.12.24
[Python] 지뢰 찾기 - 백준  (0) 2022.12.23
Comments