hugDog
Android DevLog
hugDog
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๐Ÿ™Œ Hello? (162)
    • ๐Ÿงฉ์•ˆ๋“œ๋กœ์ด๋“œ (12)
      • ๊ฐœ๋… ์ •๋ฆฌ (5)
      • ๋ฒ„๊ทธ ํ•ด๊ฒฐ (4)
      • ๊ธฐํƒ€ (3)
    • ๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜ (54)
      • ๊ฐœ๋… (0)
      • ๋ฐฑ์ค€ (48)
      • ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค (6)
    • ๐Ÿ“„๊ฐœ๋ฐœ ์ผ์ง€ (0)
      • FINPO (0)
    • ๐Ÿ”คํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (71)
      • C++ ์ •๋ฆฌ (49)
      • C++๊ธฐ์ดˆํ”Œ๋Ÿฌ์Šค ์—ฐ์Šต๋ฌธ์ œ (20)
      • Kotlin (2)
    • โญProject (1)
    • ๐ŸšดTIL (13)
      • Clean Code (13)
    • ๐Ÿšฉ๊ธฐํƒ€ (9)
      • ๋ชฉํ‘œ (6)
      • ์ผ์ƒ (3)
      • ๋ฌธ์„œ (0)

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
hugDog

Android DevLog

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 11779๋ฒˆ: ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ 2
๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 11779๋ฒˆ: ์ตœ์†Œ๋น„์šฉ ๊ตฌํ•˜๊ธฐ 2

2021. 12. 24. 22:38
728x90

๋ฌธ์ œ

ํ’€์ด

๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋˜, ์ตœ๋‹จ๊ฒฝ๋กœ ๊ฐ’์ด ๊ฐฑ์‹ ๋  ๋•Œ ๊ทธ๋•Œ์˜ ๋…ธ๋“œ ๊ฐ’๋„ ํ•จ๊ป˜ ๊ธฐ๋กํ•œ๋‹ค.

 

์‹œ์ž‘ ๋…ธ๋“œ๊ฐ€ 1๋ฒˆ ์ผ ๋•Œ,

 

1. ์ดˆ๊ธฐ๊ฐ’

distance : 1๋ฒˆ ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฒฝ๋กœ

1 2 3 4 5 6
0 4 2 INF INF INF

 

nearnest ๊ฐ’ : ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ({1}) ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ

1 2 3 4 5 6
1 1 1 1 1 1

 

2. ๊ฐฑ์‹ 

distance : 1๋ฒˆ ๋…ธ๋“œ์—์„œ n๋ฒˆ ๋…ธ๋“œ๋กœ ๊ฐ€๋Š” ๋น„์šฉ๋ณด๋‹ค 1~3, 3~n์œผ๋กœ ๊ฐ€๋Š” ๋น„์šฉ์ด ๋” ์ž‘์œผ๋ฉด ๊ฐฑ์‹ 

1 2 3 4 5 6
0 4 2 INF 6 (๊ฐฑ์‹ ) INF

 

nearnest ๊ฐ’ : ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ({1, 3}) ์ค‘์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ

1 2 3 4 5 6
1 1 1 1 3 (๊ฐฑ์‹ ) 1

 

3. 2๋ฒˆ ๋ฐ˜๋ณต

๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ ๋„์ฐฉ ๋…ธ๋“œ๊ฐ€ 5๋ผ๊ณ  ํ•˜๋ฉด

5์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๊ตฌํ•˜๊ณ , ๊ทธ ๋…ธ๋“œ์˜ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๊ตฌํ•˜๋Š” ๊ณผ์ •์„

์‹œ์ž‘ ๋…ธ๋“œ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค. ์ด ๊ณผ์ •์„ ์—ญ์œผ๋กœ ํ•˜๋ฉด ์ตœ๋‹จ ๊ฒฝ๋กœ.

 

์ฝ”๋“œ

import sys, heapq
input = sys.stdin.readline

n = int(input())
m = int(input())
graph = [[] for _ in range(n + 1)]

for _ in range(m):
    a, b, c = map(int, input().split())
    graph[a].append((b, c))

start, end = map(int, input().split())

# ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ฅผ ๊ธฐ๋ก
nearnest = [start] * (n + 1)
distance = [1e9] * (n + 1)

q = [(0, start)]
while q:
    dist, now = heapq.heappop(q)
    if dist > distance[now]:
        continue
    
    for next, nextDist in graph[now]:
        cost = nextDist + dist
        if cost < distance[next]:
            distance[next], nearnest[next] = cost, now
            heapq.heappush(q, (cost, next))
    
ans = []
tmp = end
while tmp != start:
    ans.append(str(tmp))
    tmp = nearnest[tmp]

ans.append(str(start))
ans.reverse()

print(distance[end])
print(len(ans))
print(" ".join(ans))

 

๋งˆ๋ฌด๋ฆฌ

ํ•™๊ต ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜์—…์—์„œ ํ–ˆ๋˜ ๊ณผ์ œ๋ผ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค ใ…Žใ…Ž

728x90
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ (์ƒˆ์ฐฝ์—ด๋ฆผ)
    '๐Ÿ”์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 5639๋ฒˆ: ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1417๋ฒˆ: ๊ตญํšŒ์˜์› ์„ ๊ฑฐ
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 1865๋ฒˆ: ์›œํ™€
    • [Python/ํŒŒ์ด์ฌ] ๋ฐฑ์ค€ 5014๋ฒˆ: ์Šคํƒ€ํŠธ๋งํฌ
    hugDog
    hugDog
    ์•ˆ๋“œ๋กœ์ด๋“œ ๊ณต๋ถ€ ์ค‘์ธ ํ•™์ƒ์ž…๋‹ˆ๋‹ค!

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