λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/leetcode

LeetCode 64 - Minimum Path Sum (Medium)

by HandHand 2021. 3. 2.

문제

LeetCode - 64번

풀이 κ³Όμ •

이동 λ°©ν–₯이 κ³ μ •λ˜μ–΄ μžˆλŠ” μƒνƒœμ—μ„œ λͺ©ν‘œ 지점에 λ„λ‹¬ν•˜κΈ° μœ„ν•œ μ΅œμ†Œ λΉ„μš©μ„ μ°ΎλŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
각 칸을 ν•˜λ‚˜μ˜ μ •μ μœΌλ‘œ μƒκ°ν•˜λ©΄ 이동 λ°©ν–₯이 였λ₯Έμͺ½ ν˜Ήμ€ μ•„λž˜λ‘œ κ³ μ •λ˜μ–΄ μžˆμœΌλ―€λ‘œ 이λ₯Ό κ·Έλž˜ν”„λ‘œ λͺ¨λΈλ§ν•˜μ—¬
λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ΄λ‚˜ ν”Œλ‘œμ΄λ“œμ™€ 같은 μ΅œλ‹¨ 경둜 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•  μˆ˜λ„ μžˆμ„ 것 κ°™μŠ΅λ‹ˆλ‹€.
ν•˜μ§€λ§Œ 그보닀 κ°„λ‹¨ν•˜κ²Œ 동적 κ³„νšλ²• 을 ν™œμš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§Œμ•½ dp(x, y) = (x, y)μ—μ„œ μΆœλ°œν•΄μ„œ (m, n)에 도달 ν•  수 μžˆλŠ” μ΅œλ‹¨κ²½λ‘œ 라고 μ •μ˜ν•œλ‹€λ©΄
λ‹€μŒκ³Ό 같은 점화식을 μ„ΈμšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

dp(x, y) = min(dp(x+1, y), dp(x, y+1)) + cost(x, y), μ΄λ•Œ costλŠ” ν˜„μž¬ (x, y) μ—μ„œ ν•„μš”ν•œ λΉ„μš©


ν‰μ†Œ Javascript둜 Node.jsλ‚˜ Vue.js κ°œλ°œν•  λ•Œ 일차원 배열을 주둜 μ‚¬μš©ν•˜μ˜€λŠ”λ°

이번 문제λ₯Ό ν†΅ν•΄μ„œ Javascript μ—μ„œ 닀차원 배열을 μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•˜λŠ” 방법을 읡힐 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ


/**

* @param {number[][]} grid

* @return {number}

*/

var minPathSum = function (grid) {

const M = grid.length;

const N = grid[0].length;

const memo = new Array(M).fill(0).map((_) => new Array(N).fill(-1));



const INF = Number.MAX_SAFE_INTEGER;



const dp = function (x, y) {

// λ²”μœ„λ₯Ό λ²—μ•„λ‚œλ‹€λ©΄

if (x < 0 || x >= M || y < 0 || y >= N) {

return INF;

}

// λͺ©ν‘œ 지점에 λ„λ‹¬ν•œλ‹€λ©΄

else if (x === M - 1 && y === N - 1) {

return grid[x][y];

}



if (memo[x][y] !== -1) {

return memo[x][y];

}



memo[x][y] = Math.min(dp(x + 1, y), dp(x, y + 1)) + grid[x][y];

return memo[x][y];

};



const a = dp(0, 0);

return a;

};



const grid = [

[1, 3, 1],

[1, 5, 1],

[4, 2, 1],

];



console.log(minPathSum(grid));

Javascript 닀차원 λ°°μ—΄ 생성 참고자료

λ°˜μ‘ν˜•

'πŸƒ algorithm > leetcode' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

LeetCode 49 - Group Anagrams (Medium)  (0) 2021.03.02
LeetCode 200 - Number of Islands (Medium)  (0) 2021.03.02
LeetCode 55 - Jump Game (Medium)  (0) 2021.03.02
LeetCode 70 - Climing Stairs (Easy)  (0) 2021.03.02
LeetCode 1 - Two Sum (Easy)  (0) 2021.03.02

πŸ’¬ λŒ“κΈ€