import sys input = sys.stdin.readline from collections import deque N, M = map(int,input().split()) graph = [{} for _ in range(N+1)] parents_cnt = [0]*(N+1) result = [] visited = [True]*(N+1) for _ in range(M): A,B = map(int,input().split()) graph[A][B] = 1 parents_cnt[B] += 1 que = deque() for i in range(1,N+1): if not parents_cnt[i]: que.append(i) for i in range(N): x = que.popleft() result.append(x) for next_node in graph[x]: parents_cnt[next_node] -= 1 if parents_cnt[next_node] == 0: que.append(next_node) print(*result)
m.blog.naver.com/ndb796/221236874984
25. 위상 정렬(Topology Sort)
위상 정렬(Topology Sort)은 '순서가 정해져있는 작업'을 차례로 수행해야 할 때 그 순서를 결정해주기 ...
blog.naver.com
위상정렬에 관련된 처음 보는 문제였고, 순서가 정해진 작업을 차례대로 작업할 순서를 정할때 쓰는 알고리즘이라는 것을 알았다.
이 알고리즘에 대해 더 공부하고, 기본 틀을 완성시켜놔야할것 같다.
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ/백준] 2042 구간 합 구하기 (0) | 2021.03.12 |
---|---|
[BOJ/백준] 2075 N번째 큰 수 (0) | 2021.03.12 |
[BOJ/백준] 11066 파일 합치기 (0) | 2021.03.12 |
[BOJ/백준] 1300 K번째 수 (0) | 2021.03.11 |
[BOJ/백준] 5052 전화번호 목록 (0) | 2021.03.11 |