백준 2252번 python 풀이 - 줄세우기
문제 링크
해결책
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import sys
N, M = map(int, sys.stdin.readline().rstrip().split())
indegree =[0 for i in range(N+1)]
paths = [[] for i in range(N+1)]
for i in range(M):
_from, _to = map(int, sys.stdin.readline().rstrip().split())
indegree[_to] += 1
paths[_from].append(_to)
que = []
ans = []
for i in range(1, len(indegree)):
if indegree[i] == 0:
que.append(i)
while que:
cur = que.pop(0)
ans.append(cur)
print(cur, end=" ")
for _to in paths[cur]:
indegree[_to] -= 1
if (indegree[_to] == 0) and (_to not in ans):
que.append(_to)
paths[cur] = []
주석으로 달 설명
위장 정렬. Topology Sort를 이용한 풀이이다.
This post is licensed under CC BY 4.0 by the author.