๐ ๋ฌธ์
์๊ณ ์คํ ์ด์์ง์ด ๋ชจ๋ ๋ฏธ๋ก์ ๊ฐํ๋ค. ๋ฏธ๋ก๋ N*M ํฌ๊ธฐ์ด๋ฉฐ, ์ด 1*1ํฌ๊ธฐ์ ๋ฐฉ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๋ฏธ๋ก๋ ๋น ๋ฐฉ ๋๋ ๋ฒฝ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๋น ๋ฐฉ์ ์์ ๋กญ๊ฒ ๋ค๋ ์ ์์ง๋ง, ๋ฒฝ์ ๋ถ์์ง ์์ผ๋ฉด ์ด๋ํ ์ ์๋ค.
์๊ณ ์คํ ์ด์์ง์ ์ฌ๋ฌ๋ช ์ด์ง๋ง, ํญ์ ๋ชจ๋ ๊ฐ์ ๋ฐฉ์ ์์ด์ผ ํ๋ค. ์ฆ, ์ฌ๋ฌ ๋ช ์ด ๋ค๋ฅธ ๋ฐฉ์ ์์ ์๋ ์๋ค. ์ด๋ค ๋ฐฉ์์ ์ด๋ํ ์ ์๋ ๋ฐฉ์ ์ํ์ข์ฐ๋ก ์ธ์ ํ ๋น ๋ฐฉ์ด๋ค. ์ฆ, ํ์ฌ ์ด์์ง์ด (x, y)์ ์์ ๋, ์ด๋ํ ์ ์๋ ๋ฐฉ์ (x+1, y), (x, y+1), (x-1, y), (x, y-1) ์ด๋ค. ๋จ, ๋ฏธ๋ก์ ๋ฐ์ผ๋ก ์ด๋ ํ ์๋ ์๋ค.
๋ฒฝ์ ํ์์๋ ์ด๋ํ ์ ์์ง๋ง, ์๊ณ ์คํ์ ๋ฌด๊ธฐ AOJ๋ฅผ ์ด์ฉํด ๋ฒฝ์ ๋ถ์์ด ๋ฒ๋ฆด ์ ์๋ค. ๋ฒฝ์ ๋ถ์๋ฉด, ๋น ๋ฐฉ๊ณผ ๋์ผํ ๋ฐฉ์ผ๋ก ๋ณํ๋ค.
๋ง์ฝ ์ด ๋ฌธ์ ๊ฐ ์๊ณ ์คํ์ ์๋ค๋ฉด, ์ด์์ง๋ค์ ๊ถ๊ทน์ ๋ฌด๊ธฐ sudo๋ฅผ ์ด์ฉํด ๋ฒฝ์ ํ ๋ฒ์ ๋ค ์์ ๋ฒ๋ฆด ์ ์์ง๋ง, ์ํ๊น๊ฒ๋ ์ด ๋ฌธ์ ๋ Baekjoon Online Judge์ ์๋ก๋์ด ์๊ธฐ ๋๋ฌธ์, sudo๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
ํ์ฌ (1, 1)์ ์๋ ์๊ณ ์คํ ์ด์์ง์ด (N, M)์ผ๋ก ์ด๋ํ๋ ค๋ฉด ๋ฒฝ์ ์ต์ ๋ช ๊ฐ ๋ถ์์ด์ผ ํ๋์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ฏธ๋ก์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ๊ฐ๋ก ํฌ๊ธฐ M, ์ธ๋ก ํฌ๊ธฐ N (1 ≤ N, M ≤ 100)์ด ์ฃผ์ด์ง๋ค. ๋ค์ N๊ฐ์ ์ค์๋ ๋ฏธ๋ก์ ์ํ๋ฅผ ๋ํ๋ด๋ ์ซ์ 0๊ณผ 1์ด ์ฃผ์ด์ง๋ค. 0์ ๋น ๋ฐฉ์ ์๋ฏธํ๊ณ , 1์ ๋ฒฝ์ ์๋ฏธํ๋ค.
(1, 1)๊ณผ (N, M)์ ํญ์ ๋ซ๋ ค์๋ค.
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๊ณ ์คํ ์ด์์ง์ด (N, M)์ผ๋ก ์ด๋ํ๊ธฐ ์ํด ๋ฒฝ์ ์ต์ ๋ช ๊ฐ ๋ถ์์ด์ผ ํ๋์ง ์ถ๋ ฅํ๋ค.
๐ ๋ฌธ์ ํ์ด
์ค๋๋ง์ ๋ฐ์ดํฌ์คํธ๋ผ ์ ํ์ ๋ฌธ์ ๋ฅผ ํ์๋ค.
๋ณธ๊ฒฉ์ ์ธ ๊ธ์ฐ๊ธฐ์ ์์ ํ๋์ ํฌ์คํ ์ด ์์๋๋ฐ ์ฐ์ํ ํ ํฌ์ฝ์ค ํ๋ฆฌ์ฝ์ค ๊ณผ์ ์ค์ด์ฌ์ ์กฐ๊ธ ์๋ ๋ง์ด ๋ฐ๋นด๋ค..ใ ใ
์๊ณ ํ์ด ํ ๋ฅํ ๋ฅ
๋ค์ ๋ฌธ์ ๋ก ๋์์ค๋ฉด,,
0์ 1๋ก ์ฃผ์ด์ง ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๊ณ , (1,1)์์ (n,m)๋ก ๊ฐ ๋ ๊ฐ์ฅ ์ ๊ฒ ๋ฒฝ์ ๋ถ์๊ณ ๊ฐ๋ ๊ฒ์ ์กฐ๊ฑด์ผ๋ก ํ ๋ ์ต์ ๋ช ๊ฐ์ ๋ฒฝ์ ๋ถ์ด์ผ์ง ๋์ฐฉํ ์ ์๋์ง ์ฐพ๋ ๋ฌธ์ ์๋ค.
์ํ์ข์ฐ 4๋ฐฉํฅ์ผ๋ก ์ด๋์ ํ๊ณ (1,1) ๋ถํฐ ์์ํ์ฌ ์ด๋ํ ๋ ๋ถ์ ๋ฒฝ์ ๊ฐ์๋ฅผ ์ ์ฅํ 2์ฐจ์ ๋ฐฐ์ด์ ์์ฑํ๊ณ ์ด๋ ๊ฐ์ ๋ฌดํ์ผ๋ก ์ด๊ธฐํ ํ๋ค. ์ด๋ํ๋ฉด์ ๋ถ์ ๋ฒฝ์ ๊ฐ์๋ฅผ ๊ฐฑ์ ์์ผ์ค๋ค. ์ด๋ ๋ฐ์ดํฌ์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์๋ค.
๐ป ์ฝ๋
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import sys, heapq input = sys.stdin.readline m, n = map(int,input().split()) graph = [list(map(int,input().rstrip())) for _ in range(n)] dx = [0,1,-1,0] dy = [1,0,0,-1] INF = int(1e9) distance = [[INF]*(m) for _ in range(n)] def dijkstra(): q = [] heapq.heappush(q, (0, 0, 0)) # cost, x, y distance[0][0] = 0 while q: dist, x, y = heapq.heappop(q) if x == n-1 and y == m-1: print(dist) return if distance[x][y] < dist: continue for i in range(4): nx = dx[i] + x ny = dy[i] + y if nx < 0 or ny < 0 or ny >= m or nx >= n: continue if dist+graph[nx][ny] < distance[nx][ny]: distance[nx][ny] = dist + graph[nx][ny] heapq.heappush(q, (dist+graph[nx][ny], nx, ny)) dijkstra() | cs |
๐ญ ์ํ์ฐฉ์ค
์ค๋๋ง์ ์กฐ๊ธ ํ๋(?)ํ ๋ฌธ์ ํ์ด์ ํค๋งฌ์ค ์์๋๋ฐ ํ๋ฒ์ ์ฑ๊ณตํ์ฌ์ ๋๋ฆ ๋ฟ๋ฏํ๋ค.
๐ ๋ฌธ์ ๋งํฌ ์๊ณ ์คํ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1719๋ฒ: ํ๋ฐฐ - ํ์ด์ฌ (0) | 2022.12.21 |
---|---|
[๋ฐฑ์ค] 2133๋ฒ ํ์ผ ์ฑ์ฐ๊ธฐ - ํ์ด์ฌ, ์๋ฐ (0) | 2022.12.20 |
[๋ฐฑ์ค] 16118๋ฒ ๋ฌ๋น ์ฌ์ฐ - ํ์ด์ฌ (0) | 2022.10.10 |
[๋ฐฑ์ค] 13164๋ฒ: ํ๋ณต ์ ์น์ - ์๋ฐ (0) | 2022.10.09 |
[๋ฐฑ์ค] 14621๋ฒ: ๋๋ง ์๋๋ ์ฐ์ - ํ์ด์ฌ (1) | 2022.10.08 |