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

LeetCode 198 - House Robber (Easy)

by HandHand 2021. 3. 2.

문제

LeetCode - 198번

풀이 κ³Όμ •

λ„λ‘‘μ§ˆμ„ 톡해 얻을 수 μžˆλŠ” μ΅œλŒ€ μˆ˜μ΅μ„ κ΅¬ν•˜λŠ” 동적 κ³„νšλ²• λ¬Έμ œμž…λ‹ˆλ‹€.

λ§Œμ•½ dp(house) = house μ—μ„œλΆ€ν„° λ§ˆμ§€λ§‰ μ§‘κΉŒμ§€ λ„λ‘‘μ§ˆμ„ 톡해 얻을 수 μžˆλŠ” μ΅œλŒ€ 수읡 이라고 ν•œλ‹€λ©΄,
λ‹€μŒκ³Ό 같은 점화식을 μ„ΈμšΈ 수 μžˆμŠ΅λ‹ˆλ‹€.

dp(house) = max(dp(house+1), dp(house + 2) + cost[house])


μ—¬κΈ°μ„œ 두 κ°€μ§€λ‘œ λ‚˜λˆ„μ–΄μ§€λŠ” μ΄μœ λŠ” ν˜„μž¬ house μœ„μΉ˜μ—μ„œ λ„λ‘‘μ§ˆμ„ ν•˜λŠ” 것과 μ•ˆν•˜λŠ” 것 μ΄λ ‡κ²Œ
두 가지 κ²½μš°κ°€ 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

μ½”λ“œ

/**
 * @param {number[]} nums
 * @return {number}
 */
var rob = function (nums) {
  const memo = new Array(nums.length).fill(-1);

  function dp(i) {
    if (i >= nums.length) return 0;
    if (i === nums.length - 1) return nums[i];

    if (memo[i] !== -1) return memo[i];

    memo[i] = Math.max(dp(i + 1), dp(i + 2) + nums[i]);
    return memo[i];
  }

  return dp(0);
};
λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€