import sys
import heapq
def input():
return sys.stdin.readline().rstrip()
def solution():
priority_que = []
for num in range(1,N+1):
if not indegree[num]:
priority_que.append(num)
heapq.heapify(priority_que)
result = []
while priority_que:
num = heapq.heappop(priority_que)
result.append(num)
for next_num in graph[num]:
indegree[next_num] -= 1
if not indegree[next_num]:
heapq.heappush(priority_que,next_num)
return result
N,M = map(int,input().split())
graph = [ [] for _ in range(N+1)]
indegree = [0 for _ in range(N+1)]
for _ in range(M):
x,y = map(int,input().split())
graph[x].append(y)
indegree[y] += 1
print(*solution())
문제를 읽어보면 순서가 정해져있고, 앞선 문제를 풀어야지 뒤의 문제를 풀 수 있다고 되어 있다.
이 문구를 보고 위상정렬임을 알 수 있고, 위상정렬 해주면 된다.
문제 난이도가 골드2 이지만, 골드2 수준은 아닌 듯한 문제였다. queue 대신 heapq를 쓰면 풀리는 문제라,
위상 정렬에 대해 알고 있으면 쉽게 풀릴 수 있는 문제라 생각한다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 2023 신기한 소수 (0) | 2021.09.02 |
---|---|
[BOJ/백준] 2021 최소 환승 경로 (0) | 2021.09.02 |
[BOJ/백준] 1755 숫자놀이 (0) | 2021.09.02 |
[BOJ/백준] 1561 놀이공원 (0) | 2021.09.02 |
[BOJ/백준] 1445 일요일 아침의 데이트 (0) | 2021.09.02 |