반응형
문제 설명
입출력 예제
풀이 코드
위 예시를 그림으로 표현하면 다음과 같다.
4, 6, 7은 하나의 프로젝트 팀, 싸이클을 이루고, 3은 자기 자신을 선택해 자기 자신만 프로젝트 팀에 속한다.
총 학생의 수는 7명이므로 프로젝트 팀을 이루고 있는 (3) 그룹과 (4, 6, 7)을 빼면 어느 프로젝트 팀에도 속하지 않는 학생 수는 3이 된다.
정답 코드
import sys
sys.setrecursionlimit(10 ** 8)
input = sys.stdin.readline
def dfs(start):
global cnt
visited[start] = True
route.append(start)
next = graph[start]
if visited[next]: # 사이클이 되는 팀을 뺌
if next in route:
cnt -= len(route[route.index(next):])
return
else: # 방문하지 않았다면 다음을 탐색
dfs(next)
T = int(input())
for _ in range(T):
n = int(input())
graph = [0] + list(map(int, input().split()))
visited = [False] * (n + 1)
cnt = n
for i in range(1, n + 1): # 1번 학생부터 탐색 시작
if not visited[i]:
route = []
dfs(i)
print(cnt)
'◼ 코딩테스트 > DFS,BFS' 카테고리의 다른 글
[Python/파이썬] 백준 7576 - 토마토 (0) | 2023.05.21 |
---|---|
[Python/파이썬] 백준 1937 - 욕심쟁이 판다 (0) | 2023.05.19 |
[Python/파이썬] 백준 1068 - 트리 (0) | 2023.05.18 |
[Python/파이썬] 백준 1167 - 트리의 지름 (DFS / BFS) (0) | 2023.05.17 |
[Python/파이썬] 백준 1967 - 트리의 지름 (DFS / BFS) (0) | 2023.05.17 |