โ๋ฌธ์
๋ฉ๋ชจ๋ฆฌ: 136204 KB, ์๊ฐ: 380 ms
๋ค์ต์คํธ๋ผ, ๊ทธ๋ํ ์ด๋ก , ์ต๋จ ๊ฒฝ๋ก
๋ฐฉํฅ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด ์ฃผ์ด์ง ์์์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค. ๋จ, ๋ชจ๋ ๊ฐ์ ์ ๊ฐ์ค์น๋ 10 ์ดํ์ ์์ฐ์์ด๋ค.
โ๐ปํ์ด
์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ๊ธฐ ์ํด ์ธ์ ํ๋ ฌ๊ณผ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง ์ธ์ ํ๋ ฌ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์๊ฐ ๋ณต์ก๋๊ฐ O(V²)์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์๊ฐ ๋ณต์ก๋๊ฐ O(E * logV)์ด ๋๋ฏ๋ก ์ธ์ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํด์ ํ๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ต์คํธ๋ผ๋ Heap์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋น ๋ฆ ๋๋ค.
heapq๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด pq๋ฅผ ์์ฑํด (๊ฐ์ค์น, ์์ ์ ์ ) ์์ผ๋ก ํํ์ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ dist๋ ๊ฐ ์ ์ ์ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ๋ํ๋ธ๋ค. ์์ ๋ ธ๋์์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ 0์ด๋ฏ๋ก dist[K] = 0์ผ๋ก ์ด๊ธฐํํ๋ค.
ํํ๊ฐ ๋น์ด์์ ๋๊น์ง ๋ค์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
ํํ์์ ํ์ฌ ๊ฑฐ๋ฆฌ์ ํ์ฌ ์ ์ ์์น๋ฅผ ๊บผ๋ธ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ ์ ์ ์ ์ธ์ ๋ฆฌ์คํธ์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ๋๋ค. ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ฐพ์๋ค๋ฉด ํ์ฌ ๊ฑฐ๋ฆฌ์ ์ ์ ์ ํํ์ ๋ฃ๋๋ค.
๋ง์ง๋ง์ผ๋ก dist๋ฅผ ์ถ๋ ฅํ์ฌ ๊ฐ ์ ์ ์์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค.
๐ป์ฝ๋
import sys
import heapq
input = sys.stdin.readline
V, E = map(int, input().split())
K = int(input())
adjlist = [[] for _ in range(V+1)]
for i in range(E):
u, v, w = map(int, input().split())
adjlist[u].append((v, w))
pq = []
heapq.heappush(pq, (0, K))
dist = [1e9] * (V+1)
dist[K] = 0
while pq:
d, cur = heapq.heappop(pq)
for v, w in adjlist[cur]:
if dist[v] > dist[cur] + w:
dist[v] = dist[cur] + w
heapq.heappush(pq, (dist[v], v))
for i in range(1, V+1):
if dist[i] == 1e9:
print("INF")
else:
print(dist[i])
๐ํ๊ธฐ
๊ทธ๋ํํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก DFS, BFS๋ง ์๊ฐํ๋๋ฐ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ๋ ์ค์ํ ๊ฒ ๊ฐ๋ค.
'Coding Test > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 24480. ์๊ณ ๋ฆฌ์ฆ ์์ - ๊น์ด ์ฐ์ ํ์ 2/Python - Silver 2 (0) | 2025.02.04 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ํฐ ์ ๋ง๋ค๊ธฐ/Python - Lv.2 (0) | 2025.01.27 |
[๋ฐฑ์ค] 1449. ์๋ฆฌ๊ณต ํญ์น (0) | 2024.12.21 |
[๋ฐฑ์ค] 11399. ATM/Python - Silver4 (2) | 2024.12.20 |
[๋ฐฑ์ค] 1010.๋ค๋ฆฌ ๋๊ธฐ/Python - Silver5 (1) | 2024.12.06 |