위상 정렬 => O(V+E)
- 순서가 정해져 있는 작업을 차례대로 수행할 때 사용되는 알고리즘 (방향그래프)
- 진입차수(indegree) : 노드로 들어오는 간선의 개수
- 진입차수가 0인 것을 queue에 넣고 그 노드에서 출발하는 간선 삭제
- queue가 빌 때까지 반복
코드
from collections import deque
v,e = map(int, input().split()) # v 노드 e 간선
indegree = [0] * (v+1) # 진입차수의 정보
graph = [[] for i in range(v+1)]
for _ in range(e):
a,b = map(int, input().split())
graph[a].append(b)
indegree[b] += 1
def topology_sort():
result = []
q = deque()
for i in range(1,v+1):
if indegree[i] == 0: #진입차수가 0
q.append(i)
while q:
now = q.popleft()
result.append(now)
for i in graph[now]:
indegree[i] -= 1
if indegree[i] == 0:
q.append(i)
for i in result:
print(i, end=" ")
topology_sort()
관련 문제
14567 선수과목 O (골드4)
1005 ACM Craft
2252 줄 세우기
2623 음악프로그램
1766 문제집
'🔅코딩테스트 공부🔅 > ❗알고리즘 추가 공부' 카테고리의 다른 글
[알고리즘] 최소 스패닝 트리 + 문제풀이 (0) | 2023.03.02 |
---|---|
[알고리즘] UNION FIND(서로소 집합 알고리즘) (0) | 2023.02.27 |
[알고리즘] 최단경로(다익스트라, 플로이드워셜, 벨만포드) (0) | 2023.02.24 |
[알고리즘] 분할과 정복 + 문제풀이 (0) | 2023.02.13 |
[알고리즘] 다이나믹 프로그래밍 + 문제풀이 (0) | 2023.02.09 |
댓글