๋ฐฑ์ค 1446. ์ง๋ฆ๊ธธ(๋ค์ต์คํธ๋ผ)
๋ฌธ์ ๐ต๐ซ
๋งค์ผ ์์นจ, ์ธ์ค์ด๋ ํ๊ต์ ๊ฐ๊ธฐ ์ํด์ ์ฐจ๋ฅผ ํ๊ณ D ํฌ๋ก๋ฏธํฐ ๊ธธ์ด์ ๊ณ ์๋๋ก๋ฅผ ์ง๋๋ค. ์ด ๊ณ ์๋๋ก๋ ์ฌ๊ฐํ๊ฒ ์ปค๋ธ๊ฐ ๋ง์์ ์ ๋ง ์ด์ ํ๊ธฐ๋ ํ๋ค๋ค. ์ด๋ ๋ , ์ธ์ค์ด๋ ์ด ๊ณ ์๋๋ก์ ์ง๋ฆ๊ธธ์ด ์กด์ฌํ๋ค๋ ๊ฒ์ ์๊ฒ๋์๋ค. ๋ชจ๋ ์ง๋ฆ๊ธธ์ ์ผ๋ฐฉํตํ์ด๊ณ , ๊ณ ์๋๋ก๋ฅผ ์ญ์ฃผํํ ์๋ ์๋ค. ์ธ์ค์ด๊ฐ ์ด์ ํด์ผ ํ๋ ๊ฑฐ๋ฆฌ์ ์ต์๊ฐ์ ์ถ๋ ฅํ์์ค
๋ด ํ๐ฆท
# 1446. ์ง๋ฆ๊ธธ
import sys
import heapq
input = sys.stdin.readline
INF = 1e9
n, d = map(int, input().split())
graph = [[] for _ in range(d + 1)]
distance = [INF] * (d + 1)
for i in range(d):
graph[i].append((i + 1, 1))
# ์ง๋ฆ๊ธธ ์๋ ๊ฒฝ์ฐ ์ธ์ ๋ฆฌ์คํธ์ ์ถ๊ฐํด์ฃผ๊ธฐ
for _ in range(n):
s, e, l = map(int, input().split())
# ๋ง์ง๋ง ๋์ฐฉ์ง์ ์ด ์ค์ ๊ณ ์๋๋ก ๋ณด๋ค ๋ฉ๋ฉด ๋๊ธด๋ค
if e > d:
continue
graph[s].append((e, l))
# print(graph)
distance[0] = 0
heap = [[0, 0]]
while heap:
dist, now = heapq.heappop(heap)
if dist > distance[now]:
continue
for i in graph[now]:
mn_dist = dist + i[1]
if mn_dist < distance[i[0]]:
distance[i[0]] = mn_dist
heapq.heappush(heap, (mn_dist, i[0]))
print(distance[d])
์ญ์ฃผํ์ด ์๋๋๋ฐ ๋ค์ด์ค๊ธฐ๋ ์ค์ ๊ณ ์๋๋ก๋ณด๋ค ๋จผ๊ณณ๋ ๋ค์ด์ค๊ณ ํด์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ค์ผ ํ ์ง ๊ณ ๋ฏผ์ ์ค๋ํ๋ค... ๊ทธ๋ฆฌ๊ณ ์ง๋ฆ๊ธธ์ด ์์ง๋ง ๋ ๋ฉ์ด์ ์ด์ฉ์ ์ ํ๋ ๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ ๊น ๊ณ ๋ฏผ์ ํ๋ค...
๊ฐ์ฅ ๋จผ์ ๋ชจ๋ ๋ ๊ธธ์ด1๋งํผ ๊ฐ๋ 1์ด ๊ฑธ๋ฆฐ๋ค๊ณ ์ด๊ธฐํํด์คฌ๊ณ ... ์ง๋ฆ๊ธธ ๊ฐ์ ์ ๋ ฅํ๋ฉด์ ์ญ์ฃผํ์ ํ ์ ์์ผ๋ฏ๋ก ๋ง์ง๋ง ๊ฐ์ด ๊ณ ์๋๋ก์ ๋์ ๋์ด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๋ ๋ฃ์ด์ฃผ์ง ์์๋ค...
๊ทธ๋ฆฌ๊ณ ๋๋จธ์ง๋ ์ฐ๋ฆฌ๊ฐ ์๋ ๋ค์ต์คํธ๋ผ๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ๋ฉด ๋!!! ๐๐๐
์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฐ๋ ๋ค โ๏ธ
Dijkstra
1. ์๋์๋ฆฌ
- ๊ฐ์ : ์ธ์ ๋ฆฌ์คํธ, ๊ฑฐ๋ฆฌ ๋ฐฐ์ด : ์ด๊ธฐ๊ฐ ๋ฌดํ๋๋ก ์ค์ , ํ ์์์ ์ถ๊ฐ
- ํ์์ ํ์ฌ ๋ ธ๋ ๋นผ๋ฉด์, ๊ฐ์ ํตํ ๋ ๋ ๊ฑฐ๋ฆฌ๊ฐ ์งง์์ง๋ค๋ฉด ๊ฑฐ๋ฆฌ ๊ฐฑ์ ๋ฐ ํ์ ์ถ๊ฐํด์ค๋ค
- ํ : ์ต๋๊ฐ, ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋ ์๋ฃ ๊ตฌ์กฐ
2. ๊ธฐ๋ณธ ์ฝ๋
# ๋์ต์คํธ๋ผ ๊ตฌํํ๊ธฐ
# k : ์์์
# dist : ๊ฑฐ๋ฆฌ๋ฐฐ์ด
dist[k] = 0
heapq.heappush(heap, (0, K))
while heap:
w, y = heapq.heappop(heap)
if w > dist[v] : continue
for nw, nv in edge[v]:
if dist[nv] > dist[v] + nw:
dist[nv] = dist[v] + nw
heapq.heappush(heap, dist[nv], nv))
3, ์์ด๋์ด
- ํ์ ์์ ๋ค๋ฅธ ๋ชจ๋ ์ ์ผ๋ก์ ์ต๋จ ๊ฒฝ๋ก > ๋ค์ต์คํธ๋ผ ์ฌ์ฉ
- ๋ชจ๋ ์ ๊ฑฐ๋ฆฌ ์ด๊ธฐ๊ฐ ๋ฌดํ๋๋ก ์ค์
- ์์์ ๊ฑฐ๋ฆฌ 0 ์ค์ ๋ฐ ํ์ ์ถ๊ฐ
- ํ์์ ํ๋์ฉ ๋นผ๋ฉด์ ์ํํ ๊ฒ
- ํ์ฌ ๊ฑฐ๋ฆฌ๊ฐ ์๋ก์ด ๊ฐ์ ์ ๊ฑฐ์น ๋๋ณด๋ค ํฌ๋ค๋ฉด ๊ฐฑ์
- ์๋ก์ด ๊ฑฐ๋ฆฌํ์ ์ถ๊ฐ!!!