반응형
/*
당신은 전문 강도로, 길을 따라 있는 집들을 털 계획을 세우고 있습니다. 
각 집에는 일정한 금액의 돈이 숨겨져 있으며, 
유일한 제약은 서로 인접한 두 집을 같은 날 털면 보안 시스템이 작동하여 경찰이 자동으로 출동한다는 것입니다.

정수 배열 nums가 주어지며, 이는 각 집에 숨겨진 돈의 금액을 나타냅니다. 
경찰을 경고하지 않으면서 오늘 밤에 훔칠 수 있는 최대 금액을 반환하세요.
*/

class Solution {
    public int rob(int[] nums) {
        int [] dp = new int[nums.length];
        
        if(nums.length == 1) {
            return nums[0];
        }
        else if(nums.length == 2) {
            return Math.max(nums[0], nums[1]);
        }
        else if(nums.length == 3) {
            return Math.max(nums[1], nums[0] + nums[2]);
        }

        dp[0] = nums[0];
        dp[1] = nums[1];
        dp[2] = nums[0] + nums[2];
        for(int i=3; i<nums.length; i++) {
            dp[i] = Math.max(nums[i]+dp[i-2],nums[i]+dp[i-3]);
        }

        return Math.max(dp[nums.length-1], dp[nums.length-2]);
    }
}

 

 

Example 1:

Input: nums = [1,2,3,1]
Output: 4
Explanation: Rob house 1 (money = 1) and then rob house 3 (money = 3).
Total amount you can rob = 1 + 3 = 4.

 

 

인접한 곳은 털수 없다는 조건이 붙어있는 전형적인 dp 문제이다.

 

그렇기에 전 house 를 터는게 아니라, 전전 house 나 전전전 house 까지의 값이 현재값에 영향이 온다고 볼수 있다.

점화식은 다음과 같다.

 

dp[i] = Math.max(nums[i]+dp[i-2],nums[i]+dp[i-3]);
 
 
시간복잡도는 o(n) 이다.
반응형

'Algorithm' 카테고리의 다른 글

leetcode 64 java dp  (0) 2025.03.13
leetcode 1143 java dp  (0) 2025.03.13
leetcode 53 java dp  (0) 2025.03.13
leetcode 62 java dp  (0) 2025.03.13
leetcode 167 java  (0) 2025.03.06

+ Recent posts