๋ฐ์ํ
๐ฑ ๋ฌธ์
๐ฑ ํ์ด
0. ์ ๋ ฅ ๋ฐ๊ธฐ
n, m = map(int, input().split())
graph = [[] for _ in range(n + 1)]
in_degree = defaultdict(int)
for i in range(m):
small, big = map(int, input().split())
graph[small].append(big)
in_degree[big] += 1
- ํ์์(
n
)๊ณผ ํค๋ฅผ ๋น๊ตํ ํ์(m
)์ ์ ๋ ฅ๋ฐ์ต๋๋ค. graph
์ ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค. (ํค๊ฐ ์์ ํ์ ๋ฒํธ์ ํค๊ฐ ํฐ ํ์ ๋ฒํธ๋ฅผ ์ถ๊ฐํฉ๋๋ค.)- ์์ ์ ๋ ฌ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ ์ํด ์ง์
์ฐจ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ
in_degree
๋ฆฌ์คํธ์ ์ฐ๊ฒฐ๋ ํค๊ฐ ํฐ ํ์์ ๋ฒํธ์ ์ง์ ์ฐจ์๋ฅผ 1 ์ฆ๊ฐ ์ํต๋๋ค.
1. ์ง์ ์ฐจ์๊ฐ 0์ธ ๋ ธ๋ ๊บผ๋ด๊ธฐ
queue = deque()
for i in range(1, len(graph)):
if in_degree[i] == 0:
queue.append(i)
while queue:
v = queue.popleft()
print(v, end = ' ')
for i in graph[v]:
in_degree[i] -= 1
if in_degree[i] == 0:
queue.append(i)
- queue๋ฅผ ๋ง๋ค๊ณ , ์ง์ ์ฐจ์๊ฐ 0์ธ ํ์ ๋ฒํธ๋ฅผ queue์ ๋ฃ์ต๋๋ค.
- queue์์ ํ์์ ํ๋์ฉ ๊บผ๋ด๋ฉด์ ๊บผ๋ธ ํ์๊ณผ ์ฐ๊ฒฐ๋ ํ์์ ์ง์ ์ฐจ์๋ฅผ 1์ฉ ๊ฐ์์ํต๋๋ค.
- ๊ฐ์์ํจ ์ง์ ์ฐจ์๊ฐ 0์ด ๋๋ฉด queue์ ๋ฃ์ต๋๋ค.
- queue์ ๋จ์ ํ์์ด ์์ ๋๊น์ง ๋ฃ๊ณ ๊บผ๋ด๊ธฐ๋ฅผ ๋ฐ๋ณตํฉ๋๋ค.
๐ฑ ์ฝ๋
import sys
from collections import deque
from collections import defaultdict
input = sys.stdin.readline
n, m = map(int, input().split())
graph = [[] for _ in range(n + 1)]
in_degree = defaultdict(int)
for i in range(m):
small, big = map(int, input().split())
graph[small].append(big)
in_degree[big] += 1
queue = deque()
for i in range(1, len(graph)):
if in_degree[i] == 0:
queue.append(i)
while queue:
v = queue.popleft()
print(v, end = ' ')
for i in graph[v]:
in_degree[i] -= 1
if in_degree[i] == 0:
queue.append(i)
๋ฐ์ํ
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] #1450 ๋ ์๋ฌธ์ (์ด๋ถ ํ์, Python) (0) | 2023.02.27 |
---|---|
[BOJ] #2110 ๊ณต์ ๊ธฐ ์ค์น (์ด๋ถํ์, Python) (0) | 2023.02.26 |
[BOJ] #1976 ์ฌํ๊ฐ์(Python) (0) | 2023.02.21 |
[BOJ] #13144 List of Unique Numbers (Python) (0) | 2023.02.21 |
[BOJ] #18405 ๊ฒฝ์์ ์ ์ผ (Python) (0) | 2023.02.15 |
๋๊ธ