[리트코드] 746. Min Cost Climbing Stairs




746. Min Cost Climbing Stairs

리트코드 문제 바로가기

나의 풀이

/**
 * @param {number[]} cost
 * @return {number}
 */
var minCostClimbingStairs = function (cost) {
  const dp = [0, 0];
  dp.push(Math.min(cost[0], cost[1]));
  for (let i = 3; i <= cost.length; i++) {
    let next = Math.min(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]);
    dp.push(next);
  }
  return dp[cost.length];
};

console.log(minCostClimbingStairs([10, 15, 20]));
console.log(minCostClimbingStairs([1, 100, 1, 1, 1, 100, 1, 1, 100, 1]));



알고리즘 문제 중 내가 가장 약한 부분인 dp를 처음 개념부터 천천히 짚고 넘어가고자 한다.
유튜브 해설 바로가기

64. Minimum Path Sum

리트코드 문제 바로가기

나의 풀이

/**
 * @param {number[][]} grid
 * @return {number}
 */
var minPathSum = function (grid) {
  const m = grid.length;
  const n = grid[0].length;

  for (let i = 0; i < m; i++) {
    for (let j = 0; j < n; j++) {
      if (i === 0) {
        if (j === 0) continue;
        else grid[i][j] += grid[i][j - 1];
      } else if (j === 0) grid[i][j] += grid[i - 1][j];
      else {
        grid[i][j] += Math.min(grid[i - 1][j], grid[i][j - 1]);
      }
    }
  }
  return grid[m - 1][n - 1];
};

console.log(
  minPathSum([
    [1, 3, 1],
    [1, 5, 1],
    [4, 2, 1],
  ])
);

저번에 풀었던 문제지만, 위의 문제를 2D로 변형만 하면 같은 문제라서 다시 한번 풀어보았다.