https://www.acmicpc.net/problem/2252
ํ์ด ๊ณผ์
์ ๋ ฅ๊ฐ์ ํค๋ฅผ ๋น๊ตํ ํ์ A์ B์ ์์๊ฐ M๊ฐ๋งํผ ์ฃผ์ด์ง๋ค.
๋ฐ๋ก ์ด์ ์ ํ์๋ ACMCraft์ ๋น์ทํ ์ ํ์ธ ๊ฑฐ ๊ฐ์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํด๊ฒฐํ๋ค.
์์ ์ ๋ ฌ๋ง ์๋ฉด ๊ฐ๋จํ๊ฒ ํด๊ฒฐ ๊ฐ๋ฅํ๋ค.
from collections import deque
import sys
input = sys.stdin.readline
N, M = map(int,input().rstrip().split())
student_adj_list = [[] for _ in range(N + 1)]
in_degree = [0 for _ in range(N + 1)]
que = deque()
for i in range(M):
x, y = map(int,input().rstrip().split())
student_adj_list[x].append(y)
in_degree[y] += 1
์ ์ ์ ๋ค์ด์ค๋ ๊ฐ์ ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํด in_degree๋ฆฌ์คํธ์ ์ธ์ ๋ฆฌ์คํธ student_adj_list๋ฅผ ์ ์ธํ๋ค.
์ดํ ๋ค์ด์ค๋ M๊ฐ์ ์ ๋ ฅ๊ฐ์ ์ ์ฅํ๋ฉด ์ค๋น ๋
for i in range(1,N + 1):
if in_degree[i] == 0:
que.append(i)
while que:
node = que.popleft()
print(node,end=' ')
for student in student_adj_list[node]:
in_degree[student] -= 1
if in_degree[student] == 0:
que.append(student)
print()
๊ฐ์ฅ ์ด๊ธฐ ์ํ์ ์ ์ ์ ๋ค์ด์ค๋ ๊ฐ์ ์(in_degree) ๊ฐ์ด 0์ธ ๊ฒ๋ค์ ํ์ ๋ฃ์ด์ค๋ค.
ํด๋น ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ ์ ๋ค์ in_degree๊ฐ๋ค์ 1์ฉ ๊ฐ์์์ผ์ค๋ค.
๊ฐ์ด 0์ด ๋ ์ ์ ์ ํ์ ๋ฃ์ด์ค๋ค. ํ๊ฐ ๋น์์ง ๋๊น์ง ๋ฐ๋ณตํ๋ฉด ๋๋ค.
์ ์ฒด ์ฝ๋
from collections import deque
import sys
input = sys.stdin.readline
N, M = map(int,input().rstrip().split())
student_adj_list = [[] for _ in range(N + 1)]
in_degree = [0 for _ in range(N + 1)]
que = deque()
for i in range(M):
x, y = map(int,input().rstrip().split())
student_adj_list[x].append(y)
in_degree[y] += 1
for i in range(1,N + 1):
if in_degree[i] == 0:
que.append(i)
while que:
node = que.popleft()
print(node,end=' ')
for student in student_adj_list[node]:
in_degree[student] -= 1
if in_degree[student] == 0:
que.append(student)
print()
'๐งฉ Problem Solving > [๋ฐฑ์ค]' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 7569 ํ ๋งํ (python ํ์ด์ฌ) (0) | 2022.06.14 |
---|---|
[๋ฐฑ์ค] 13549 ์จ๋ฐ๊ผญ์ง3 (python ํ์ด์ฌ) (0) | 2022.06.13 |
[๋ฐฑ์ค] 11718 ๊ทธ๋๋ก ์ถ๋ ฅํ๊ธฐ (python ํ์ด์ฌ) (0) | 2022.06.10 |
[๋ฐฑ์ค] 1005 ACMCraft (python ํ์ด์ฌ) (0) | 2022.06.10 |
[๋ฐฑ์ค] 14499 ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ(python ํ์ด์ฌ) (0) | 2022.06.09 |