-
[Dijkstra] BOJ 1261 ์๊ณ ์คํAlgorithms in Python/baekjoon 2021. 2. 15. 01:55
๐ ๋ฐฑ์ค 1261 ์๊ณ ์คํ
โ ๋ฌธ์ ์ ํต์ฌ, ํ์ด ๊ณผ์
• ๋ฏธ๋ก๋ N*M ํฌ๊ธฐ์ด๋ฉฐ, ์ด 1*1ํฌ๊ธฐ์ ๋ฐฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ฏธ๋ก๋ ๋น ๋ฐฉ ๋๋ ๋ฒฝ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๋น ๋ฐฉ์ ์์ ๋กญ๊ฒ ๋ค๋ ์ ์์ง๋ง, ๋ฒฝ์ ๋ถ์์ง ์์ผ๋ฉด ์ด๋ํ ์ ์๋ค.
• ํ์ฌ ์ด์์ง์ด (x, y)์ ์์ ๋, ์ด๋ํ ์ ์๋ ๋ฐฉ์ (x+1, y), (x, y+1), (x-1, y), (x, y-1) ์ด๋ค. ๋จ, ๋ฏธ๋ก์ ๋ฐ์ผ๋ก ์ด๋ ํ ์๋ ์๋ค.
=> ๊ฐ ๋ฐฉ(๋ฏธ๋ก์ ์์น)์ ํ๋์ ๋ ธ๋๋ผ๊ณ ์๊ฐํ๋ค. ์ด๋ํ ์ ์๋ ๋ฐฉ์ ํ์ฌ ๋ฐฉ์์์ ์ธ์ ํ ์ํ์ข์ฐ ๋ฐฉ์ด๋ค.
• ํ์ฌ (1, 1)์ ์๋ ์๊ณ ์คํ ์ด์์ง์ด (N, M)์ผ๋ก ์ด๋ํ๋ ค๋ฉด ๋ฒฝ์ ์ต์ ๋ช ๊ฐ ๋ถ์์ด์ผ ํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
=> (x1, y1)์์ (x2, y2)๋ก ์ด๋ํ์ ๋ (x2, y2)์ ๊ฐ์ ์ด๋ ๋น์ฉ์ด๋ผ๊ณ ์๊ฐํ ์ ์๋ค.
=> ์ฆ, (1, 1) ๋ ธ๋์์ (n, n) ๋ ธ๋๊น์ง ์ด๋ํ๊ธฐ ์ํด ๋ฒฝ์ ์ต์๋ก ๋ถ์๋ ๊ฐ์๋ (1, 1) ๋ ธ๋์์ (n, n) ๋ ธ๋๊น์ง์ ์ต๋จ ๊ฒฝ๋ก์ด๋ค. (๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ)
โ ์ ์ฒด ์ฝ๋
import sys import heapq input = sys.stdin.readline INF = int(1e9) # ์ํ์ข์ฐ ์ด๋ dx = [-1, 1, 0, 0] dy = [0, 0, -1, 1] m, n = map(int, input().split()) graph = [] distance = [[INF] * m for _ in range(n)] for _ in range(n): graph.append(list(map(int, input().rstrip()))) # ์์ ์์น ์ด๊ธฐํ x, y = 0, 0 q = [] heapq.heappush(q, (0, x, y)) distance[x][y] = 0 while q: dist, x, y = heapq.heappop(q) # ์ด๋ฏธ ์ฒ๋ฆฌ๋ ๊ฒฝ์ฐ if distance[x][y] < dist: continue # ์ํ์ข์ฐ ์ธ์ ํ ๋ ธ๋ ํ์ธ for i in range(4): nx = x + dx[i] ny = y + dy[i] if nx < 0 or nx >= n or ny < 0 or ny >= m: continue cost = dist + graph[nx][ny] if cost < distance[nx][ny]: distance[nx][ny] = cost heapq.heappush(q, (cost, nx, ny)) print(distance[n-1][m-1])
'Algorithms in Python > baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Impl] BOJ 3190 ๋ฑ (0) 2021.02.22 [Union-Find] BOJ 10775 ๊ณตํญ (0) 2021.02.08 [Stack] BOJ 17299 ์ค๋ฑํฐ์ (0) 2021.02.03 [Prefix Sum] BOJ 20002 ์ฌ๊ณผ๋๋ฌด (0) 2021.02.03 [Sliding Window] BOJ 10025 ๊ฒ์ผ๋ฅธ ๋ฐฑ๊ณฐ (0) 2021.02.03