반응형
/*
**m x n 크기의 그리드(grid)**가 주어졌으며, 각 칸에는 0 이상의 숫자가 들어 있습니다.
왼쪽 상단 **(grid[0][0])**에서 오른쪽 하단 **(grid[m-1][n-1])**으로 이동하는 경로 중에서,
경로 상의 숫자 합이 최소가 되는 경로를 찾으세요.
📌 제한 사항:
한 번에 오른쪽 또는 아래쪽으로만 이동할 수 있습니다.
*/
class Solution {
public int minPathSum(int[][] grid) {
int y = grid.length;
int x = grid[0].length;
int [][] dp = new int[y][x];
dp[0][0] = grid[0][0];
for(int i=1; i<x; i++) {
dp[0][i] = dp[0][i-1] + grid[0][i];
}
for(int j=1; j<y; j++) {
dp[j][0] = dp[j-1][0] + grid[j][0];
}
for(int j=1; j<y; j++) {
for(int i=1; i<x; i++) {
dp[j][i] = Math.min(dp[j-1][i], dp[j][i-1]) + grid[j][i];
}
}
return dp[y-1][x-1];
}
}
Example 1:
Input: grid = [[1,3,1],[1,5,1],[4,2,1]]
Output: 7
Explanation: Because the path 1 → 3 → 1 → 1 → 1 minimizes the sum.
일단 최종구역까지 어느 구간이 최단거리인지 찾는 문제이다. dp 는 2차원 배열이 필요하다.
1열과 1행은 누적된 값을 넣어준다.
해당그림에서의 dp는
1 4 5
2 0 0
6 0 0
으로 초기화가 되고 dp 순차탐색이 시작된다.
점화식은 다음과 같다.
dp[j][i] = Math.min(dp[j-1][i], dp[j][i-1]) + grid[j][i];
현재 기준으로 위와 왼쪽중에 최단거리를 찾아 grid[i][j](현재값) 을 더하면 현재 위치까지의 최단 거리가 나온다.
그렇게 끝까지 진행하고 리턴하면 정답이 나온다.
최종 dp 값은 이렇다.
1 4 5
2 7 6
6 8 7
따라서 7이 정답이다.
반응형
'Algorithm' 카테고리의 다른 글
leetcode 102 dfs preorder (0) | 2025.03.27 |
---|---|
leetcode 79 dfs+백트래킹 (0) | 2025.03.27 |
leetcode 1143 java dp (0) | 2025.03.13 |
leetcode 198 java dp (0) | 2025.03.13 |
leetcode 53 java dp (0) | 2025.03.13 |