https://leetcode.com/problems/house-robber-ii/description/
house robber 문제에서 변형이 된 문제다.
집들이 원형으로 이어져 있다는 전제가 추가되었다.
0 ~ n-1 까지 탐색하면 원형 조건에 걸리지 않는다(맨 마지막 집 계산 제외).
1 ~ n 까지 탐색하면 원형 조건에 걸리지 않는다(맨 처음 집 계산 제외).
그럼 둘 다 계산해서 둘 중 Max값을 찾으면 된다.
계산 로직은 house robber 문제와 동일하게 가져갔는데, Arrays.copyOfRange 메서드를 사용해서 탐색 범위를 따로 가져가게 했다.
예) Arrays.copyOfRange(nums, 0, nums.length - 1)
class Solution {
public int rob(int[] nums) {
if (nums.length == 1) return nums[0];
return Math.max(
getMax(Arrays.copyOfRange(nums, 0, nums.length - 1)),
getMax(Arrays.copyOfRange(nums, 1, nums.length))
);
}
public int getMax(int[] subNums) {
if (subNums.length == 1) return subNums[0];
int[] dp = new int[subNums.length];
dp[0] = subNums[0];
dp[1] = Math.max(subNums[0], subNums[1]);
for (int i=2; i<subNums.length; i++) {
dp[i] = Math.max(dp[i - 1], dp[i - 2] + subNums[i]);
}
return dp[subNums.length - 1];
}
}