이것이 코딩테스트다 39 화성 탐사 (Python)

이것이 코딩테스트다 39 화성 탐사 (Python)

문제 링크

화성 탐사 기계가 존재하는 공간은 N x N 2차원 공간이며 각각의 칸을 지나기 위한 비용이 존재한다. 가장 왼쪽 칸에서 가장 오른쪽 아래 칸인 위치로 이동하는 최소 비용을 출력하는 프로그램을 작성하세요.

Test Case

입력

3

3

5 5 4

3 9 1

3 2 7

5

3 7 2 0 1

2 8 0 9 1

1 2 1 8 1

9 8 9 2 0

3 6 5 1 5

7

9 0 5 1 1 5 3

4 1 2 1 6 5 3

0 7 6 1 6 8 5

1 1 7 8 3 2 3

9 4 0 7 6 4 1

5 8 3 2 4 8 3

7 4 8 4 8 3 4

출력

20

19

36

문제 풀이

기존에 이코테 책에서 나오던 다익스트라 스타일이 아닌 문제. 기존에 풀던 다익스트라 문제는 노드1에서 노드2로 가는 비용을 주어지는 식으로 출제됐는데, 이 문제는 2차원 배열로 각 노드사이의 거리들을 모두 주어지고 최단거리를 구하는 문제이다.

다익스트라 코드도 잘 못외웠는데 거기에 2차원 배열로 코드를 짜려니 손도 잘 못 댔다. 꼭 나중에 다시 풀어봐야할 문제!

Source Code

import sys import heapq INF = int(1e9) input = sys.stdin.readline dx = [0,1,0,-1] dy = [1,0,-1,0] t = int(input()) for _ in range(t): n = int(input()) graph = [] for i in range(n): graph.append(list(map(int, input().split()))) distance = [[INF] * n for _ in range(n)] x,y = 0,0 q = [(graph[x][y], x,y)] distance[x][y] = graph[x][y] 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 >= n: 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][n-1])

from http://minimun92.tistory.com/56 by ccl(A) rewrite - 2021-09-03 03:00:47