๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [Gold3] 2252๋ฒˆ_์ค„ ์„ธ์šฐ๊ธฐ

Dbswnstjd 2023. 5. 4. 12:09

๋ฌธ์ œ

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

ํ’€์ด

# ๋ฐฑ์ค€ 2252๋ฒˆ ๋ฌธ์ œ - ์ค„ ์„ธ์šฐ๊ธฐ 
from collections import deque
n, m = map(int, input().split())
graph = [[] for _ in range(n+1)]
inDegree = [0] * (n+1)
q = deque()
answer = []
for _ in range(m):
    a, b = map(int, input().split())
    graph[a].append(b)
    inDegree[b] += 1

for i in range(1, n+1):
    if inDegree[i] == 0:
        q.append(i)

while q:
    temp = q.popleft()
    answer.append(temp)
    for i in graph[temp]:
        inDegree[i] -= 1
        if inDegree[i] == 0:
            q.append(i)
print(*answer)

์œ„์ƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

์œ„์ƒ์ •๋ ฌ์€ ์ฒ˜์Œ ์ ‘ํ•ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์˜€๋‹ค. 

 

inDegree๋Š” ์•ž์˜ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ˆ˜๋ฅผ ์„ธ๋Š” ๋ณ€์ˆ˜์ด๋‹ค. inDegree๊ฐ€ 0 ์ด๋ฉด ํ์— ๋„ฃ์–ด์ค€๋‹ค. 

ํ๊ฐ€ ๋นŒ ๋•Œ ๊นŒ์ง€ while ๋ฌธ์„ ๋Œ๋ฉด์„œ q์˜ ์•ž์— ์žˆ๋‹ค๋ฉด ๋จผ์ € ๋‚˜์™€์•ผ ํ•˜๋Š” ํ•™์ƒ์ด๋‹ค. 

์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ํ•™์ƒ์„ ํƒ์ƒ‰ ํ›„ ์•ž์— ์™€์•ผํ•˜๋Š” ํ•™์ƒ์ด ์—†๋‹ค๋ฉด ์ถœ๋ ฅํ•ด์ฃผ๋„๋ก ํ•œ๋‹ค.