- κ° μ§μ μμΉν λμ μ‘μκ° λ°°μ΄
nums
λ‘ μ£Όμ΄μ‘μ λ λλμ΄ νλν μ μλ κ°μ₯ λ§μ μ‘μλ₯Ό ꡬνλ λ¬Έμ . λ¨, μ°μλ 2κ°μ μ§μ λ°©λ¬Ένκ²λλ©΄ 경보 μμ€ν
μ΄ μΈλ €μ μ‘ν μ μλ€.
- κ²°κ΅ νμ¬ μ§μ λ°©λ¬Ένμ λ λλμ μ νμ§λ λκ°μ§κ° λλ€.
- μ΄μ μ§μ λ°©λ¬Έ
robbed = 1
νλ€λ©΄, νμ¬ μ§μμ λμ νλν μ μκ³ κ±΄λλ΄ κ²μΌλ‘ νμ robbed = 0
ν΄μΌ νλ€. - μ΄μ μ§μ λ°©λ¬Ένμ§ μμλ€
robbed = 0
λ€λ©΄, νμ¬ μ§μμ λ nums[index]
μ νλνκ³ μνλ₯Ό νμ robbed = 1
νλ€.
- μν κ°μ μ΄μ μ§μ λ°©λ¬Έ μ¬λΆ
robbed = 0 or 1
λ° μμΉ index
μ λ°λΌ μ μ₯ dp[robbed][index]
νκ³ μ΄λ―Έ κ³μ°λ κ°μ λ€μ κ³μ°νμ§ μκ³ νμ©νλ€.
class Solution {
int traverse(int[] nums, int[][] dp, int index, int robbed) {
if (index >= nums.length) return 0;
if (dp[robbed][index] != -1) return dp[robbed][index];
int result = traverse(nums, dp, index + 1, 0);
if (robbed == 0) {
result = Math.max(
result,
traverse(nums, dp, index + 1, 1) + nums[index]);
}
return dp[robbed][index] = result;
}
public int rob(int[] nums) {
int[][] dp = new int[2][nums.length];
Arrays.fill(dp[0], -1);
Arrays.fill(dp[1], -1);
return traverse(nums, dp, 0, 0);
}
}