코딩하는 해맑은 거북이
[Python] 순열 사이클 - 백준 (BFS) 본문
해당 글은 백준 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