on
이것이 코딩테스트다 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