[Python] 1766 ๋ฌธ์ œ์ง‘

2026. 3. 26. 13:12ยทCoding-Test/๋ฐฑ์ค€
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ’ป ๋ฌธ์ œ ์ •์˜

๋ฏผ์˜ค๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€ ์ด N๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋˜์–ด ์žˆ๋Š” ๋ฌธ์ œ์ง‘์„ ํ’€๋ ค๊ณ  ํ•œ๋‹ค. ๋ฌธ์ œ๋Š” ๋‚œ์ด๋„ ์ˆœ์„œ๋กœ ์ถœ์ œ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰ 1๋ฒˆ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ์‰ฌ์šด ๋ฌธ์ œ์ด๊ณ  N๋ฒˆ ๋ฌธ์ œ๊ฐ€ ๊ฐ€์žฅ ์–ด๋ ค์šด ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.

์–ด๋–ค ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€๊นŒ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ๋ฌธ์ œ๋ฅผ ํ›‘์–ด๋ณด๋˜ ๋ฏผ์˜ค๋Š”, ๋ช‡๋ช‡ ๋ฌธ์ œ๋“ค ์‚ฌ์ด์—๋Š” '๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ'๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 1๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ๋‚˜๋ฉด 4๋ฒˆ ๋ฌธ์ œ๊ฐ€ ์‰ฝ๊ฒŒ ํ’€๋ฆฐ๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ์‹์ด๋‹ค. ๋ฏผ์˜ค๋Š” ๋‹ค์Œ์˜ ์„ธ ๊ฐ€์ง€ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๊ธฐ๋กœ ํ•˜์˜€๋‹ค.

  1. N๊ฐœ์˜ ๋ฌธ์ œ๋Š” ๋ชจ๋‘ ํ’€์–ด์•ผ ํ•œ๋‹ค.
  2. ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ฌธ์ œ๋Š”, ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋จผ์ € ํ’€์–ด์•ผ ํ•œ๋‹ค.
  3. ๊ฐ€๋Šฅํ•˜๋ฉด ์‰ฌ์šด ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€์–ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ์˜ ๊ฐœ์ˆ˜์™€ ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด์„œ ๋ฏผ์˜ค๊ฐ€ ํ’€ ๋ฌธ์ œ์˜ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•ด ์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•œ๋‹ค.

๐Ÿ’ก ์ ‘๊ทผ ๋ฐ ์„ค๊ณ„

N๊ฐœ์˜ ๋ฌธ์ œ๋ฅผ ๊ฐ ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋กœ ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋จผ์ € ํ‘ธ๋Š” ๊ฒƒ์ด ์ข‹์€ ๋ฌธ์ œ์˜ ์Œ์€ A → B ํ˜•ํƒœ์˜ ๊ทธ๋ž˜ํ”„๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, A๋Š” ์ฐจ์ˆ˜๊ฐ€ 1, B๋Š” ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค. ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ง„๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ •๋ ฌ์ธ ์œ„์ƒ ์ •๋ ฌ์„ ์ด์šฉํ•œ๋‹ค.

๋ฌธ์ œ์˜ ์กฐ๊ฑด์—์„œ, 1๋ฒˆ ๋ฌธ์ œ์˜ ๋‚œ์ด๋„๋Š” 1, 2๋ฒˆ ๋ฌธ์ œ์˜ ๋‚œ์ด๋„๋Š” 2, … ์ด๋Ÿฐ ์‹์œผ๋กœ ์‰ฌ์šด ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ ธ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋Šฅํ•˜๋ฉด ์‰ฌ์šด ๋ฌธ์ œ๋ถ€ํ„ฐ ํ’€์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋จผ์ € ํ’€๋ฉด ์ข‹์€ ๋ฌธ์ œ๋“ค ์‚ฌ์ด์—์„œ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•ด ๋ฌธ์ œ ํ’€์ด ์ˆœ์„œ๋ฅผ ํ™•์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด

# 1766 ๋ฌธ์ œ์ง‘

import heapq

def topo_sort():
    # min-heap ๊ตฌ์„ฑ. heap์— ๋“ค์–ด๊ฐ„ ๋ฌธ์ œ๋Š” ๋‚œ์ด๋„ ์ˆœ์œผ๋กœ ์ž๋™ ์ •๋ ฌ๋˜์–ด ์‰ฌ์šด ๋ฌธ์ œ๋ถ€ํ„ฐ ํ•ด๊ฒฐํ•œ๋‹ค.
    Q = []
    result = []

    # ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ(๋จผ์ € ํ’€๋ฉด ์ข‹์€ ๋ฌธ์ œ) ๋„ฃ๊ธฐ
    for i in range(1, N+1):
        if degree[i] == 0:
            heapq.heappush(Q, i)
    
    while Q:
        curr = heapq.heappop(Q) # ํ˜„์žฌ ํ’€ ๋ฌธ์ œ
        result.append(curr) # ๊ฒฐ๊ณผ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€

        # [A, B]์—์„œ A๋ฅผ ํ’€์—ˆ์œผ๋‹ˆ B๋ฅผ ํ’€ ์ฐจ๋ก€
        for ix in graph[curr]:
            degree[ix] -= 1

            # ์ฐจ์ˆ˜๊ฐ€ 0์ด ๋˜์—ˆ๋‹ค๋ฉด, ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋„ ๋œ๋‹ค.
            if degree[ix] == 0:
                heapq.heappush(Q, ix)

    print(*result)

N, M = map(int, input().split())

degree = [0] * (N+1) # ๊ฐ ๋…ธ๋“œ๋ณ„ ์ฐจ์ˆ˜

graph = [[] for _ in range(N+1)]
for _ in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)
    degree[b] += 1

topo_sort()

์œ„์ƒ ์ •๋ ฌ(Topology Sort) ๊ตฌํ˜„์ด๋‹ค. ์ง„์ž… ์ฐจ์ˆ˜๊ฐ€ 0์ธ ๋…ธ๋“œ(๋ฆฌํ”„ ๋…ธ๋“œ)๋ผ๋ฉด heap์— ๋„ฃ์–ด์ค€๋‹ค. heap์—๋Š” ๋จผ์ € ํ’€๋ฉด ์ข‹์€(= ์ˆœ์„œ๊ฐ€ ์ •ํ•ด์ง„) ๋ฌธ์ œ๋“ค์ด ๋“ค์–ด์˜ค๊ณ , ๊ทธ๋Ÿฐ ๋ฌธ์ œ๋“ค ์ค‘์—์„œ๋„ ๋‚œ์ด๋„๊ฐ€ ์‰ฌ์šด ๋ฌธ์ œ๋ฅผ ์šฐ์„ ์ ์œผ๋กœ(min-heap) ํ’€ ์ˆ˜ ์žˆ๋„๋ก popํ•œ๋‹ค.

๐Ÿ—’๏ธ ์ตœ์ข… ์ œ์ถœ ์ฝ”๋“œ (Python3 ์ œ์ถœ)

# 1766 ๋ฌธ์ œ์ง‘

import heapq

def topo_sort():
    Q = []
    result = []

    for i in range(1, N+1):
        if degree[i] == 0:
            heapq.heappush(Q, i)
    
    while Q:
        curr = heapq.heappop(Q)
        result.append(curr)

        for ix in graph[curr]:
            degree[ix] -= 1

            if degree[ix] == 0:
                heapq.heappush(Q, ix)

    print(*result)

N, M = map(int, input().split())

degree = [0] * (N+1)
graph = [[] for _ in range(N+1)]
for _ in range(M):
    a, b = map(int, input().split())
    graph[a].append(b)
    degree[b] += 1

topo_sort()

๐Ÿ’ญ ์˜ค๋Š˜์˜ ํšŒ๊ณ 

์œ„์ƒ ์ •๋ ฌ + ์šฐ์„ ์ˆœ์œ„ ํ์˜ ๋ฌธ์ œ์˜€๋‹ค. ์œ„์ƒ ์ •๋ ฌ์„ ์ฒ˜์Œ ๊ณต๋ถ€ํ–ˆ์„ ๋• deque๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•๋งŒ์ด ์กด์žฌํ•˜๋Š” ์ค„ ์•Œ์•˜์œผ๋‚˜ ๋จผ์ € ๋“ค์–ด์˜จ ์ˆœ์„œ → min-heap์„ ํ†ตํ•œ ์ตœ์†Ÿ๊ฐ’์œผ๋กœ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ๋ฐฐ์› ๋‹ค.

728x90
๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Coding-Test > ๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Python] 16724 ํ”ผ๋ฆฌ ๋ถ€๋Š” ์‚ฌ๋‚˜์ด  (0) 2026.03.26
[Python] 2342 Dance Dance Revolution  (0) 2026.03.20
[Python] 11049 ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ  (0) 2026.03.20
[Python] 16947 ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„   (0) 2026.03.19
[Python] 2613 ์ˆซ์ž๊ตฌ์Šฌ  (0) 2026.03.18
'Coding-Test/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Python] 16724 ํ”ผ๋ฆฌ ๋ถ€๋Š” ์‚ฌ๋‚˜์ด
  • [Python] 2342 Dance Dance Revolution
  • [Python] 11049 ํ–‰๋ ฌ ๊ณฑ์…ˆ ์ˆœ์„œ
  • [Python] 16947 ์„œ์šธ ์ง€ํ•˜์ฒ  2ํ˜ธ์„ 
ํฌ์™„
ํฌ์™„
ํฌ์™„ํ•œ ์ฝ”๋”ฉ์ผ์ƒ
    ๋ฐ˜์‘ํ˜•
  • ํฌ์™„
    Code-Heewan
    ํฌ์™„
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • Python
        • ๊ฐ€์ƒํ™˜๊ฒฝ
      • Algorithm
      • Coding-Test
        • ๋ฐฑ์ค€
        • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
        • ํ•ญํ•ด99
      • Data-Analysis
      • ์›น ๊ฐœ๋ฐœ
        • django
      • AWS
      • ๊ณต๋ชจ์ „
      • Mobile
  • ๋งํฌ

    • Github
  • 300x250
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
ํฌ์™„
[Python] 1766 ๋ฌธ์ œ์ง‘
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”