Skip to content

Commit 9326eb2

Browse files
committed
[BOJ] #2252. 줄 세우기 / 골드3 / 50분 / 힌트사용 -> 성공
1 parent e2928b5 commit 9326eb2

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import sys
2+
from collections import deque
3+
input = sys.stdin.readline
4+
5+
n, m = map(int, input().split()) # 학생 수, 학생순서
6+
graph = [[] for _ in range(n + 1)] # 학생 순서 그래프
7+
# 모든 노드에 대한 진입 차수는 0으로 초기화
8+
indegree = [0] * (n + 1)
9+
10+
# 비교(간선) 정보 입력 받기
11+
for _ in range(m):
12+
a, b = map(int, input().split())
13+
# a 보다 큰 노드로 b 추가
14+
graph[a].append(b)
15+
# b의 진입차수 1 증가
16+
indegree[b] += 1
17+
18+
# 위상 정렬 함수
19+
def topology_sort():
20+
result = [] # 키 순서대로 정렬
21+
q = deque()
22+
23+
# 처음 시작할 때는 진입 차수가 0인 노드를 큐에 삽입. 즉 가장 작은 학생
24+
for i in range(1, n + 1):
25+
if indegree[i] == 0:
26+
q.append(i)
27+
28+
# 큐가 빌 때까지 반복
29+
while q:
30+
now = q.popleft()
31+
result.append(now)
32+
# 해당 원소와 연결된 노드들의 진입 차수에서 1 빼기
33+
for i in graph[now]:
34+
indegree[i] -= 1
35+
# 새롭게 진입 차수가 0이 되는 노드를 큐에 삽입
36+
if indegree[i] == 0:
37+
q.append(i)
38+
39+
for i in result:
40+
print(i, end=" ")
41+
42+
topology_sort()

0 commit comments

Comments
 (0)