양수로 이루어진 m x n 그리드를 인자로 드립니다.
상단 왼쪽에서 시작하여, 하단 오른쪽까지 가는 길의 요소를 다 더했을 때,가장 작은 합을 찾아서 return 해주세요.
한 지점에서 우측이나 아래로만 이동할 수 있습니다.
Input:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
Output: 7
설명: 1→3→1→1→1 의 합이 제일 작음
이건 BFS(Breadth First Search)공부를 해보신 분이면 쉽게 풀수 있을 문제인듯 하다.
- queue를 이용하여 첫번째 위치에서 갈수 있는 모든 좌표, 그리고 두번째 위치에서 갈수 있는 모든 좌표... n번째 위치에서 갈수 있는 모든 좌표들을 푸쉬한다.
- 지나온 모든 좌표들에서의 합을 구한다.
- 종착지에서 경로를 지나오면서 구한 합을 비교하여 가장 작은 값을 선택한다.
메인 로직은 위와 같다.
def min_path_sum(grid):
m = len(grid)
n = len(grid[0])
node = [0, 0, grid[0][0]]
q = [node]
direct = [
[0, 1],
[1, 0]
]
min = 999999
while(True):
if not q: break
temp = q.pop(0)
for i in range(2):
dx = temp[0] + direct[i][0]
dy = temp[1] + direct[i][1]
if dx >= m or dy >= n: continue
if (dx == m - 1 and dy == n - 1) and min > temp[2] + grid[dx][dy]:
min = temp[2] + grid[dx][dy]
sum = temp[2] + grid[dx][dy]
q.append([dx, dy, sum])
return min