CS 공부/백준 - Python
[백준 2252번] 줄 세우기 : 위상 정렬(Topology Sort) - 파이썬(Python)
nanocat
2022. 12. 9. 16:41
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
def topology_sort(indegree, edge, n):
result = [] # 큐에서 꺼낸 순서, 위상 정렬의 결과
queue = deque()
for i in range(1, n+1):
if indegree[i] == 0: # 진입 차수가 0인 정점을 큐에 삽입한다.
queue.append(i)
while queue:
current = queue.popleft() # 큐에서 원소를 꺼낸다.
result.append(current)
for i in edge[current]: # 원소와 연결된 모든 간선을 제거한다.
indegree[i] -= 1
if indegree[i] == 0: # 간선 제거 이후에 진입 차수가 0이 된 정점을 큐에 삽입힌다.
queue.append(i)
for i in result:
print(i, end=' ')
def main():
n, m = map(int, input().strip().split(' '))
edge = [ [] for _ in range(n+1) ]
indegree = [0] * (n+1)
for _ in range(m):
u, v = map(int, input().strip().split(' '))
edge[u].append(v)
indegree[v] += 1
topology_sort(indegree, edge, n)
if __name__ == '__main__':
main()
레퍼런스
https://m.blog.naver.com/ndb796/221236874984
25. 위상 정렬(Topology Sort)
위상 정렬(Topology Sort)은 '순서가 정해져있는 작업'을 차례로 수행해야 할 때 그 순서를 ...
blog.naver.com