본문 바로가기

코딩테스트 준비/[백준]

[백준] boj 2252 줄세우기 - 위상정렬

https://www.acmicpc.net/problem/2252

 

2252번: 줄 세우기

첫째 줄에 N(1 ≤ N ≤ 32,000), M(1 ≤ M ≤ 100,000)이 주어진다. M은 키를 비교한 회수이다. 다음 M개의 줄에는 키를 비교한 두 학생의 번호 A, B가 주어진다. 이는 학생 A가 학생 B의 앞에 서야 한다는 의

www.acmicpc.net

from collections import deque
import sys
input = sys.stdin.readline


n, m = map(int, input().split())
q = deque()
indegrees = [0] * (n+1)
graph = [[] for _ in range(n+1)]

for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    indegrees[b] += 1

for i in range(1, n+1):
    if indegrees[i] == 0:
        q.append(i)
result = []
while q:
    cur = q.popleft()
    result.append(cur)
    for i in graph[cur]:
        indegrees[i] -= 1
        if indegrees[i] == 0:
            q.append(i)

for v in result:
    print(v, end=' ')

 

https://www.youtube.com/watch?v=xeSz3pROPS8&t=316s