198. House Robber
각 주택의 금액을 나타내는 정수 배열 nums가 주어지면, 경찰에 알리지 않고 오늘 밤 훔칠 수 있는 최대 금액을 반환
동적프로그래밍: 하향식 방법으로 반복을 이용해서 구현
- recurrence relation: rob = max(arr[0] + rob[2:n], rob[1:n])
class Solution {
public int rob(int[] nums) {
int[] dp = new int[nums.length];
if (nums.length == 1) return nums[0];
dp[0] = nums[0];
dp[1] = Math.max(nums[0], nums[1]);
for (int i = 2; i < nums.length; i++) {
dp[i] = Math.max(dp[i - 1], dp[i - 2] + nums[i]);
}
return dp[nums.length - 1];
}
}
class Solution {
// Dynamic Programming
public int rob(int[] nums) {
int a = 0, b = 0;
int t;
// recurrence relation(점화식): f(k) = max(f(k-2) + num(k), f(k-1))
// a, b = b, max(a + i, b)
// 점화식을 가지고 값을 치환하면서 최종 결과까지의 값을 구해 나간다.
for (int i : nums) {
// (현재값 + 전전값) 과 이전값 중에서 더 큰값이 최대값
t = Math.max(a + i, b);
a = b;
b = t;
/*
t = a;
a = b;
b = Math.max(i + t, b);
*/
}
return b;
}
}