포스트

Minimum Path Sum

LeetCode 64. Minimum Path Sum

원문

Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right, which minimizes the sum of all numbers along its path.

Note: You can only move either down or right at any point in time.

풀이

우선 0번째 열을 순회하며 grid[i][0]grid[i - 1][0]을 더한다. 이렇게 하면 (0, 0)에서 아래로만 이동했을 때의 최소 path sum을 구할 수 있다.
비슷하게 0번째 행을 순회하며 grid[0][i]grid[0][i - 1]을 더한다.
그 다음에는 이중 for문을 돌며 path sum을 구한다. 이때 행과 열의 순회 시작은 0이 아니라 1이다.

코드

Python

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution:
    def minPathSum(self, grid: List[List[int]]) -> int:
        m = len(grid)
        n = len(grid[0])

        for i in range(1, m):
            grid[i][0] += grid[i - 1][0]

        for i in range(1, n):
            grid[0][i] += grid[0][i - 1]

        for i in range(1, m):
            for j in range(1, n):
                grid[i][j] += min(grid[i - 1][j], grid[i][j - 1])

        return grid[-1][-1]

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
    public int minPathSum(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;

        for (int i = 1; i < m; i++) {
            grid[i][0] += grid[i - 1][0];
        }

        for (int i = 1; i < n; i++) {
            grid[0][i] += grid[0][i - 1];
        }


        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1]);
            }
        }

        return grid[m - 1][n - 1];
    }
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.