문제
풀이
- 일부 학생들의 키를 비교한 결과가 주어지며, 학생들을 키 순서대로 줄을 세울려고 한다. 줄을 세우는 프로그램을 작성하라.
- 순서가 정해져 있는 일련의 작업을 차례대로 수행하는 문제로
위상 정렬 알고리즘
을 적용할 수 있다.
코드
from collections import deque
import sys
input = sys.stdin.readline
def topology_sort() -> str:
result = []
queue = deque()
for i in range(1, n+1):
if indegree[i] == 0:
queue.append(i)
while queue:
now = queue.popleft()
result.append(now)
for i in graph[now]:
indegree[i] -= 1
if indegree[i] == 0:
queue.append(i)
return ' '.join(map(str, result))
if __name__ == '__main__':
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
print(topology_sort())
결과
출처 & 깃허브
BOJ 2252
GITHUB