(DP, Medium) House Robber II

송재호·2025년 2월 13일
0

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];
    }
}
profile
식지 않는 감자

0개의 댓글

관련 채용 정보