# 1. ๊ฐ์ฅ ๋น ๋ฅธ ๊ธธ ์ฐพ๊ธฐ
์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ: ๊ฐ์ฅ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ ('๊ธธ ์ฐพ๊ธฐ')
๋ค์ํ ์ข ๋ฅ๊ฐ ์์ง๋ง, ์ํฉ์ ๋ง๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ด ์ด๋ฏธ ์ ๋ฆฝ๋์ด ์๋ค.
์ต๋จ ๊ฒฝ๋ก ๋ฌธ์ ๋ ๋ณดํต ๊ทธ๋ํ๋ฅผ ์ด์ฉํด ํํํ๋๋ฐ
๊ฐ ์ง์ ์ '๋ ธ๋', ์ง์ ๊ฐ ์ฐ๊ฒฐ๋ ๋๋ก๋ '๊ฐ์ '์ผ๋ก ํํ๋๋ค.
์ฝ๋ฉ ํ ์คํธ์์๋ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ๋ ๋ฌธ์ ๋ณด๋ค๋ ๋จ์ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ๋๋ก ์๊ตฌํ๋ ๋ฌธ์ ๊ฐ ๋ง์ด ์ถ์ ๋๋ค.
์ปดํจํฐ๊ณตํ๊ณผ ํ๋ถ ์์ค์์๋ ๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ, ํ๋ก์ด๋ ์์ , ๋ฒจ๋ง ํฌ๋ ์๊ณ ๋ฆฌ์ฆ 3๊ฐ์ง๋ฅผ ๋ฐฐ์ด๋ค.
๋ณธ ์ฑ ์์๋ ๊ฐ์ฅ ๋ง์ด ๋ฑ์ฅํ๋ ์ ํ์ธ ์ต๋จ ๊ฒฝ๋ก์ ํ๋ก์ด๋ ์์ ์๊ณ ๋ฆฌ์ฆ๋ง ๋ฐฐ์ด๋ค.
๋๋ถ์ด, ์์ ๊ณต๋ถํ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์๊ณ ๋ฆฌ์ฆ์ด ์ต๋จ ๊ฒฝ๋ก์ ๊ทธ๋๋ก ์ ์ฉ๋๋ค๋ ํน์ง์ด ์๋ค.
๋ค์ ๋งํด, ์ต๋จ ๊ฒฝ๋ก๋ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ ์๊ณ ๋ฆฌ์ฆ์ ํ ์ ํ์ด๋ค.
๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ
๋ค์ต์คํ(Dijkstra) ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ
: ๊ทธ๋ํ์์ ์ฌ๋ฌ ๊ฐ์ ๋ ธ๋๊ฐ ์์ ๋, ํน์ ํ ๋ ธ๋์์ ์ถ๋ฐํ์ฌ
๋ค๋ฅธ ๋ ธ๋๋ก ๊ฐ๋ ๊ฐ๊ฐ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํด์ฃผ๋ ์๊ณ ๋ฆฌ์ฆ
: ์์ ๊ฐ์ (0๋ณด๋ค ์์ ๊ฐ์์ ๊ฐ์ง๋ ๊ฐ์ )์ด ์์ ๋ ์ ์์ ์ผ๋ก ๋์
์ฐธ๊ณ ๋ก, ํ์ค์ธ๊ณ์ ๊ธธ(๊ฐ์ )์ ์์ ๊ฐ์ ์ผ๋ก ํํ๋์ง ์์ผ๋ฏ๋ก
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ๋ก GPS ์ํํธ์จ์ด์ ๊ธฐ๋ณธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ฑํ๋๊ณ ๋ ํ๋ค.
์๊ณ ๋ฆฌ์ฆ
1. ์ถ๋ฐ ๋ ธ๋๋ฅผ ์ค์ ํ๋ค.
2. ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ์ด๊ธฐํํ๋ค.
3. ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ์ค์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋ ธ๋๋ฅผ ์ ํํ๋ค.
4. ํด๋น ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ๋ค๋ฅธ ๋ ธ๋๋ก ๊ฐ๋ ๋น์ฉ์ ๊ณ์ฐํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ ํ ์ด๋ธ์ ๊ฐฑ์ ํ๋ค.
5. ์ ๊ณผ์ ์์ 3&4๋ฅผ ๋ฐ๋ณตํ๋ค.
ํ์ฌ ์ฒ๋ฆฌํ๊ณ ์๋ ๋ ธ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฃผ๋ณ ๊ฐ์ ์ ํ์ธํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ ์๋ 2๊ฐ์ง์ด๋ค.
๋ฐฉ๋ฒ 1. ๊ตฌํํ๊ธฐ ์ฝ์ง๋ง ๋๋ฆฌ๊ฒ ๋์ํ๋ ์ฝ๋
๋ฐฉ๋ฒ 2. ๊ตฌํํ๊ธฐ์ ์กฐ๊ธ ๋ ๊น๋ค๋กญ์ง๋ง ๋น ๋ฅด๊ฒ ๋์ํ๋ ์ฝ๋
์ฝ๋ฉ ํ ์คํธ๋ฅผ ์ค๋นํ๊ธฐ ์ํด์๋ ์๋ค๊ฐ๋ ์ผ์ด๋์ ๋ฐ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ ์ ๋๋ก [๋ฐฉ๋ฒ 2] ์ฝ๋์ ์๋ฌ๋์ด ์์ด์ผ ํ๋ค.
๋์ ์๋ฆฌ
์๋ฅผ ๋ค์ด ์ถ๋ฐ ๋ ธ๋๊ฐ 1์ผ ๋, 1๋ฒ ๋ ธ๋์์ ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋๋ก์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํด๋ณด์.
์ด๊ธฐ ์ํ์์๋ ๋ค๋ฅธ ๋ชจ๋ ๋ ธ๋๋ก ๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ '๋ฌดํ'์ผ๋ก ์ด๊ธฐํํ๋ค.
(์ฝ๋์์๋ ์ด๋ฅผ 1e9๋ก ํ์ํ๋๋ฐ, ํ์ด์ฌ์ ๊ฒฝ์ฐ ์ค์ ์๋ฃํ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ์ int(1e9)๋ก ์ด๊ธฐํ)
step 0. ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ์ค์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋ ธ๋ ์ ํ
(์ถ๋ฐ-์ถ๋ฐ: 0์ผ๋ก ์ค์ )
step 1. 1๋ฒ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ ๋ค๋ฅธ ๋ ธ๋๋ก ๊ฐ๋ ๋น์ฉ ๊ณ์ฐ
1๋ฒ ๋ ธ๋๊น์ง ์ค๋ ๋น์ฉ: 0
2๋ฒ (1๋ฒ->1๋ฒ + 1๋ฒ->2๋ฒ = 0 + 2) = 2
3๋ฒ (1๋ฒ->1๋ฒ + 1๋ฒ->3๋ฒ = 0 + 5) = 5
4๋ฒ (1๋ฒ->1๋ฒ + 1๋ฒ->4๋ฒ = 0 + 1) = 1
๊ทธ๋ฆฌ๊ณ ์์ ๊ฐ์ ๋ ธ๋์ ๋ํด ๋ ์งง์ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ผ๋ฏ๋ก, ์๋ก์ด ๊ฐ์ผ๋ก ๊ฐฑ์ ํ๋ค.
step 2. ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ์ค์์ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋ ธ๋ ์ ํ
2๋ฒ, 3๋ฒ, 4๋ฒ -> 4๋ฒ ๋ ธ๋ ์ ํ๋จ
์ด์ด์, 4๋ฒ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ์ ๊ฐ ์ ์๋ ๋ ธ๋๋ฅผ ํ์ธํ๋ค.
3๋ฒ (1๋ฒ->4๋ฒ + 4๋ฒ->3๋ฒ = 1 + 3) = 4
5๋ฒ (1๋ฒ->4๋ฒ + 4๋ฒ->5๋ฒ = 1 + 1) = 2
์ด ๋ ๊ฐ์ ๊ธฐ์กด์ ๋ฆฌ์คํธ์ ๋ด๊ฒจ ์๋ ๊ฐ๋ณด๋ค ์์ผ๋ฏ๋ก ๋ค์์ฒ๋ผ ๋ฆฌ์คํธ๊ฐ ๊ฐฑ์ ๋๋ค.
step 3. 2๋ฒ ๋ ธ๋๊ฐ ์ ํ๋จ (์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ ๋๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฒํธ๊ฐ ์์ ๋ ธ๋ ์ ํ)
์ต๋จ ๊ฒฝ๋ก 2์ธ 2๋ฒ ๋ ธ๋์ 5๋ฒ ๋ ธ๋ ์ค, 2๋ฒ ๋ ธ๋๋ฅผ ์ ํํ๋ค.
์ด๋ฒ ๋จ๊ณ์์๋ 2๋ฒ ๋ ธ๋๋ฅผ ๊ฑฐ์น๋ค๊ณ ํด๋ ์ต์๊ฐ์ด ๋์ค์ง ์์ ๊ฐฑ์ ๋์ง ์๋๋ค.
step 4. 5๋ฒ ๋ ธ๋๊ฐ ์ ํ๋จ
5๋ฒ ๋ ธ๋๊ฐ ์ ํ๋๊ณ , 6๋ฒ ๋ ธ๋๋ก ๊ฐ๋ ๊ฐ๋ ๊ฐฑ์ ๋๋ค.
6๋ฒ (1๋ฒ->5๋ฒ + 5๋ฒ->6๋ฒ = 2 + 2) = 4
step 5. 3๋ฒ ๋ ธ๋๊ฐ ์ ํ๋จ
3๋ฒ ๋ ธ๋๊ฐ ์ ํ๋๊ณ , ๋์ผํ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
step 6. 6๋ฒ ๋ ธ๋๊ฐ ์ ํ๋จ
6๋ฒ ๋ ธ๋๊ฐ ์ ํ๋๊ณ , ๋์ผํ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ์ '๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ์ค์์ ๊ฐ์ฅ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์งง์ ๋ ธ๋๋ฅผ ์ ํ'ํ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
์ด๋ ๊ฒ ์ ํ๋ ๋ ธ๋๋ '์ต๋จ ๊ฑฐ๋ฆฌ'๊ฐ ์์ ํ ์ ํ๋ ๋ ธ๋์ด๋ฏ๋ก, ๋ ์ด์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ณตํด๋ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์ค์ด๋ค์ง ์๋๋ค.
๋ค์ ๋งํด, ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ด ์งํ๋๋ฉด์ ํ ๋จ๊ณ๋น ํ๋์ ๋ ธ๋์ ๋ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ํ์คํ ์ฐพ๋ ๊ฒ์ผ๋ก ์ดํดํ๋ค.
๋ฐฉ๋ฒ1. ๊ฐ๋จํ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ์ ์ค์ ๋ก ๊ตฌํํด๋ณด์.
๊ฐ๋จํ ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ $O(V^2)$์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ค์ต์คํธ๋ผ์ ์ํด์ ์ฒ์ ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฌ๊ธฐ์ $V$๋ ๋ ธ๋์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
์ด ์๊ณ ๋ฆฌ์ฆ์ ์ง๊ด์ ์ด๊ณ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
์ฒ์์ ๊ฐ ๋ ธ๋์ ๋ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๋ด๋ 1์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ ์ธํ๋ค.
์ดํ์ ๋จ๊ณ๋ง๋ค '๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ์ค์์
์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋ ธ๋๋ฅผ ์ ํ'ํ๊ธฐ ์ํด ๋งค ๋จ๊ณ๋ง๋ค 1์ฐจ์ ๋ฆฌ์คํธ์ ๋ชจ๋ ์์๋ฅผ ํ์ธ(์์ฐจ ํ์)ํ๋ค.
'์ต๋จ ๊ฒฝ๋ก'๋ฅผ ๊ตฌํ๋ ค๋ฉด ์๋ ์์ค ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ค.
์ฝ๋ฉ ํ ์คํธ์์๋ ๋์ฒด๋ก ํน์ ํ ๋ ธ๋์์ ๋ค๋ฅธ ํน์ ํ ๋ ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ง์ ์ถ๋ ฅํ๋๋ก ์์ฒญํ๋ฏ๋ก,
์ด๋ฒ ์ฅ์์ '์ต๋จ ๊ฒฝ๋ก'๊น์ง ๋ชจ๋ ์ถ๋ ฅํ๋ ๋ด์ฉ์ ๋ค๋ฃจ์ง ์๋๋ค.
import sys
# ๋ฐฑ์ค์์๋ sys.stdin.readline()์ ์ฌ์ฉํ์ง๋ง, ๋ก์ปฌ์์๋ input.txt ํ์ผ์ ์ฝ๋๋ก ๋ณ๊ฒฝ
sys.stdin = open("input.txt", "r")
INF = int(1e9)
# ๋
ธ๋์ ๊ฐ์, ๊ฐ์ ์ ๊ฐ์ ์
๋ ฅ ๋ฐ๊ธฐ๊ธฐ
n, m = map(int, sys.stdin.readline().split())
# ์์ ๋
ธ๋ ๋ฒํธ๋ฅผ ์
๋ ฅ ๋ฐ๊ธฐ
start = int(sys.stdin.readline())
# ๊ฐ ๋
ธ๋์ ์ฐ๊ฒฐ๋์ด ์๋ ๋
ธ๋์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๋ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ
graph = [[] for i in range(n+1)]
# ๋ฐฉ๋ฌธํ ์ ์ด ์๋์ง ์ฒดํฌํ๋ ๋ชฉ์ ์ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ
visited = [False] * (n + 1)
# ์ต๋จ ๊ฑฐ๋ฆฌ ํ
์ด๋ธ์ ๋ชจ๋ ๋ฌดํ์ผ๋ก ์ด๊ธฐํ)
distance = [INF] * (n + 1)
# ๋ชจ๋ ๊ฐ์ ์ ๋ณด๋ฅผ ์
๋ ฅ ๋ฐ๊ธฐ
for _ in range(m):
a, b, c = map(int, sys.readline().split())
# a๋ฒ ๋
ธ๋์์ b๋ฒ ๋
ธ๋๋ก ๊ฐ๋ ๋น์ฉ์ด c๋ผ๋ ์๋ฏธ
graph[a].append((b,c))
# ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋ ์ค์์, ๊ฐ์ฅ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์งง์ ๋
ธ๋์ ๋ฒํธ๋ฅผ ๋ฐํ
def get_smallest_node():
min_value = INF
index = 0 # ๊ฐ์ฅ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ์งง์ ๋
ธ๋(์ธ๋ฑ์ค)
for i in range(1, n+1):
if distance[i] < min_value and not visited[i]:
min_value = distance[i]
index = i
return index
def dijkstra(start):
# ์์ ๋
ธ๋์ ๋ํด์ ์ด๊ธฐํ
distance[start] = 0
visited[start] = True
for j in graph[start]:
distance[j[0]] = j[1]
# ์์ ๋
ธ๋๋ฅผ ์ ์ธํ ์ ์ฒด n-1๊ฐ์ ๋
ธ๋์ ๋ํด ๋ฐ๋ณต
for i in range(n-1):
# ํ์ฌ ์ต๋จ ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์งง์ ๋
ธ๋๋ฅผ ๊บผ๋ด์, ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
now = get_smallest_node()
visited[now] = True
# ํ์ฌ ๋
ธ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๋
ธ๋ ํ์ธ
for j in graph[now]:
cost = distance[now] + j[1]
# ํ์ฌ ๋
ธ๋๋ฅผ ๊ฑฐ์ณ์ ๋ค๋ฅธ ๋
ธ๋๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ ์งง์ ๊ฒฝ์ฐ
if cost < distance[j[0]]:
distance[j[0]] = cost
# ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ์ํ
dijkstra(start)
# ๋ชจ๋ ๋
ธ๋๋ก ๊ฐ๊ธฐ ์ํ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅ
for i in range(1, n+1):
# ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ, ๋ฌดํ(infinity)์ด๋ผ๊ณ ์ถ๋ ฅ
if distance[i] == INF:
print("INFINITY")
# ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ, ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅ
else:
print(distance[i])
'๐ Study > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ํ์ ์๊ณ ๋ฆฌ์ฆ DFS, BFS (0) | 2025.04.06 |
---|---|
[Algorithm] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (0) | 2025.03.04 |
[Algorithm] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ ๊ธฐ์ถ๋ฌธ์ (0) | 2024.06.26 |
[Algorithm] ๊ทธ๋ฆฌ๋(Greedy) ์๊ณ ๋ฆฌ์ฆ (0) | 2024.06.26 |
[์๊ณ ๋ฆฌ์ฆ] 2์ฃผ์ฐจ ๊ฐ์ | ์ฐ์ ์์ ํ ADT, ์ ์๋ฆฌ ์ ํ์ ๋ ฌ, ์ ์๋ฆฌ ์ฝ์ ์ ๋ ฌ (2) | 2022.09.10 |