백준 문제 링크
문제집
- 위상 정렬 알고리즘을 활용했다.
- 하지만 기본 위상 정렬에서는 큐(Queue)를 사용하는데,
여기서는 문제의 조건 가능하면 쉬운 문제부터 풀어야 한다. 때문에
우선순위 큐(Priority Queue)를 사용해야한다.- 다른 소스코드는 같고, 큐에 넣고 빼줄 때만 heapq를 사용하면 된다.
import heapq
n, m = map(int, input().split())
indegree = [0] * (n + 1)
graph = [[] for _ in range(n + 1)]
for _ in range(m):
a, b = map(int, input().split())
graph[a].append(b)
indegree[b] += 1
q = []
def topology_sort():
result = []
for i in range(1, n + 1):
if indegree[i] == 0:
heapq.heappush(q, i)
while q:
now = heapq.heappop(q)
result.append(now)
for i in graph[now]:
indegree[i] -= 1
if indegree[i] == 0:
heapq.heappush(q, i)
return result
print(*topology_sort())