본문 바로가기
알고리즘 문제풀이/leetcode

[leetcode 64] Minimum Path Sum

by m2162003 2020. 10. 27.

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.

Example:

Input:

[   [1,3,1],

    [1,5,1],

    [4,2,1] ]

Output: 7

Explanation: Because the path 1→3→1→1→1 minimizes the sum.

 

문제 풀이:

- dp 사용

- 가장 왼쪽  col이나 가장 위쪽 row는 각각 위쪽, 왼쪽에 위치한 이전 배열 값을 현재 배열값에 더한다.

- 나머지 배열은 위와 왼쪽에 있는 값을 비교하여 작은 값과 배열값을 더한다.

dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + nums[i][j];

 

class Solution {
public:
    int minPathSum(vector<vector<int>>& grid) {
        int m = grid.size();
        if(m == 0){
            return 0;
        }
        int n = grid[0].size();
        
        int dp[m][n];
        memset(dp, 0, sizeof(dp));
        
        dp[0][0] = grid[0][0];
        for(int i=0; i<m; i++){
            for(int j=0; j<n; j++){
                if(i==0 && j==0)
                    continue;
                
                if(i == 0){
                    dp[0][j] = dp[0][j-1] + grid[0][j];
                    continue;
                }
                
                if(j ==0){
                    dp[i][0] = dp[i-1][0] + grid[i][0];
                    continue;
                }
                
                dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1]);
            }
        }
        
        return dp[m-1][n-1];
    }
};

'알고리즘 문제풀이 > leetcode' 카테고리의 다른 글

[leetcode 53] Maximum Subarray  (0) 2020.10.27
[leetcode 62]Unique Paths  (0) 2020.10.27
[leetcode 96] Unique Binary Search Trees  (0) 2020.10.26
[leetcode 139] Word Break  (0) 2020.10.26
[leetcode 70] Climbing Stairs  (0) 2020.10.26

댓글