Skip to content
Algorithm.js | Algorithm in JavaScript
📚 단일 패턴

64. Minimum Path Sum

2차원 grid에서 오른쪽 아래까지의 최소 경로 합을 bottom-up 동적 계획법으로 구하는 방법 정리

Oct 31, 2025

문제 설명

풀이 아이디어

var minPathSum = function(grid) {
const [ ROWS, COLS ] = [ grid.length, grid[0].length ];
const cache = {};
const genKey = (r,c) => `${r}${c}`;
const dfs = (r, c) => {
if (r < 0 || c < 0) return Infinity;
if (c === 0) {
let sum = 0;
for (let iR = 0; iR <= r; iR += 1) {
sum += grid[iR][0];
}
return sum;
}
if (c === 0) {
let sum = 0;
for (let iC = 0; iC <= c; iC += 1) {
sum += grid[0][iC];
}
return sum;
}
const key = genKey(r, c);
if (cache[key] !== undefined) return cache[key];
cache[key] = Math.min(
dfs(r-1, c),
dfs(r, c- 1)
) + grid[r][c];
return cache[key];
}
return dfs(ROWS - 1, COLS - 1)
};

해결 전략

풀이

구현

/**
* @param {number[][]} grid
* @return {number}
*/
var minPathSum = function(grid) {
const [ ROWS, COLS ] = [ grid.length, grid[0].length ];
const dp = Array(ROWS).fill(null).map(() => Array(COLS).fill(0));
dp[0][0] = grid[0][0]
for (let r = 1 ; r < ROWS; r += 1) {
dp[r][0] = dp[r-1][0] + grid[r][0]
}
for (let c = 1; c < COLS; c += 1) {
dp[0][c] = dp[0][c-1] + grid[0][c];
}
for (let r = 1; r < ROWS; r += 1) {
for (let c = 1; c < COLS; c += 1) {
dp[r][c] = Math.min(
dp[r-1][c] + grid[r][c],
dp[r][c-1] + grid[r][c]
)
}
}
return dp[ROWS-1][COLS-1];
};