BOJ - 10451

주의·2024년 1월 4일
0

boj

목록 보기
49/214

백준 문제 링크
순열 사이클

❓접근법

  1. BFS를 사용했다.
  2. 기본 bfs 함수 형식으로, 방문 처리하는 함수를 만들어준다.
  3. for i in range(1,N+1)로 만약 i에 방문하지 않았다면,
    bfs(i)를 실행하고, answer + 1 해준다.
    이 코드의 의미는 문제의 설명처럼 1에서 시작했을 때,
    1 -> 3 -> 5 -> 7의 사이클동안 다 1,3,5,7을 방문처리하고,
    1개의 사이클이므로 answer + 1 해주는 것이다.

👌🏻코드

from collections import deque

def bfs(x):
    queue = deque()
    queue.append(x)
    
    while queue:
        v = queue.popleft()
        
        for i in lst[v]:
            if not visited[i]:
                visited[i] = True
                queue.append(i)


T = int(input())
for _ in range(T):
    N = int(input())
    
    visited = [False] * (N+1)
    
    lst = [[] for _ in range(N+1)]
    
    x = list(map(int, input().split()))
    
    for i in range(N):
        lst[i+1].append(x[i])
        
    answer = 0            
    for i in range(1,N+1):
        if not visited[i]:
            bfs(i)
            answer += 1
    print(answer)

0개의 댓글