BOJ - 1766

주의·2024년 2월 8일
0

boj

목록 보기
207/214

백준 문제 링크
문제집

❓접근법

  1. 위상 정렬 알고리즘을 활용했다.
  2. 하지만 기본 위상 정렬에서는 큐(Queue)를 사용하는데,
    여기서는 문제의 조건 가능하면 쉬운 문제부터 풀어야 한다. 때문에
    우선순위 큐(Priority Queue)를 사용해야한다.
  3. 다른 소스코드는 같고, 큐에 넣고 빼줄 때만 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())

0개의 댓글