๐ก 2์ฐจ์ ๋งต์์์ ์ต์ ๋น์ฉ ๊ฒฝ๋ก: Dijkstra ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ
๐ง ๋ฌธ์ ๋ฐฐ๊ฒฝ
N×N ํฌ๊ธฐ์ ๋งต์ด ์ฃผ์ด์ง๋ค.
๊ฐ ์นธ์๋ ๋น์ฉ์ด ์์ผ๋ฉฐ, ์ฐ๋ฆฌ๋ (0, 0)์์ ์์ํด (N-1, N-1)๋ก ์ด๋ํ๊ณ ์ ํ๋ค.
์ด๋์ ์ํ์ข์ฐ๋ก๋ง ๊ฐ๋ฅํ๊ณ , ๊ฐ ์นธ์ ์ง๋ ๋๋ ํด๋น ์นธ์ ๋น์ฉ์ ์ง๋ถํด์ผ ํ๋ค.
โ ๋ชฉํ: (0, 0)์์ (N-1, N-1)๊น์ง์ ์ต์ ๋น์ฉ์ ๊ตฌํ๋ผ
๐ ๊ธฐ๋ณธ ๊ตฌํ: Dijkstra with ์ฐ์ ์์ ํ
import sys
import heapq
sys.stdin = open('input.txt', 'r')
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
def dijkstra():
heap = []
heapq.heappush(heap, (arr[0][0], 0, 0))
while heap:
cost, x, y = heapq.heappop(heap)
if x == N-1 and y == N-1:
return cost
for k in range(4):
nx = x + dx[k]
ny = y + dy[k]
if nx < 0 or ny < 0 or nx >= N or ny >= N:
continue
new_cost = cost + arr[nx][ny]
if visited[nx][ny] <= new_cost:
continue
visited[nx][ny] = new_cost
heapq.heappush(heap, (new_cost, nx, ny))
count = 0
while True:
count += 1
N = int(input())
if N == 0:
break
arr = [list(map(int, input().split())) for _ in range(N)]
visited = [[float('inf')] * N for _ in range(N)]
result = dijkstra()
print(f"Problem {count}: {result}")
โ ๋ด๊ฐ ๊ฒช์ ๋ฌธ์ : ์กฐ๊ฑด ํ๋๋ก ์ธํ ์๊ฐ ์ด๊ณผ
๊ธฐ์กด ์ฝ๋:
if visited[nx][ny] <= new_cost:
continue
๋ฌธ์ ์ :
- new_cost == visited[nx][ny]์ผ ๋๋ continue ์ฒ๋ฆฌ๋จ → ๊ฒฝ๋ก ๋๋ฝ → ์๊ฐ์ด๊ณผ ๊ฐ๋ฅ
ํด๊ฒฐ:
if visited[nx][ny] > new_cost:
visited[nx][ny] = new_cost
heapq.heappush(heap, (new_cost, nx, ny))
โ ์ ๋ฆฌ
- Dijkstra์์ ์กฐ๊ฑด ํ๋(
<=vs>)๊ฐ ์ฑ๋ฅ๊ณผ ์ ๋ต์ ์ข์ฐํ ์ ์๋ค. - ํ์ด์ฌ์
int๋ ์๋์ผ๋ก ํฐ ์ ์๋ ์ฒ๋ฆฌํ๋ฏ๋ก ์ค๋ฒํ๋ก์ฐ ๊ฑฑ์ ์์ - ์๊ฐ ์ ํ์ด ์๋ ๋ฌธ์ ์์๋ ์์ ์กฐ๊ฑด ์ค์๊ฐ ์ ์ฒด ์คํ์๊ฐ์ ์ข์ฐํ ์ ์๋ค
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค 2075: N๋ฒ์งธ ํฐ ์(JAVA) (0) | 2025.05.06 |
|---|---|
| ๋ฐฑ์ค 13114: List of Unique Numbers(ํ์ด์ฌ) (0) | 2025.04.28 |
| 22251๋ฒ: ๋น๋ฐ ํธ์(ํ์ด์ฌ) (0) | 2025.04.26 |
| ๋ฐฑ์ค 4179: ๋ถ!(ํ์ด์ฌ) (0) | 2025.04.26 |
| ๋ฐฑ์ค 1253: ์ข๋ค(ํ์ด์ฌ) (0) | 2025.04.25 |