leetcode 198번 집 약탈(동적 기획)

4650 단어 leetcode동적 기획
제목 설명: 당신은 전문적인 도둑입니다. 길가의 집을 훔칠 계획입니다.모든 방 안에 일정한 현금이 숨어 있는데 당신이 도둑질하는 데 영향을 주는 유일한 제약 요소는 바로 이웃집에 서로 연결된 도난 방지 시스템이 설치되어 있다는 것이다. 만약에 이웃집 두 칸이 같은 밤에 도둑에게 침입당하면 시스템은 자동으로 경보를 울릴 것이다.
각 집의 보관 금액을 대표하는 비음정수조를 정해 경보 장치를 건드리지 않은 상태에서 하룻밤 안에 훔칠 수 있는 최고 금액을 계산한다.예1: 입력: [1,2,3,1] 출력: 4 해석: 1번 집(금액=1)을 훔친 다음에 3번 집(금액=3)을 훔친다.훔친 최고 금액 = 1 + 3 = 4.
예2: 입력: [2,7,9,3,1] 출력: 12 해석: 1번 집을 훔치다(금액=2), 3번 집을 훔치다(금액=9), 이어서 5번 집을 훔친다(금액=1).훔친 최고 금액 = 2 + 9 + 1 = 12.
출처: 리코더 링크:https://leetcode-cn.com/problems/house-robber저작권은 인터넷 소유에 귀속된다.상업 전재는 관공서에 연락하여 권한을 수여하고 비상업 전재는 출처를 밝혀 주십시오.
문제 풀이:
class Solution {
     
public:
    int rob(vector<int>& nums) 
    {
     
        int n = nums.size();
        if(n == 0)
            return 0;
        if(n == 1)
            return nums[0];
        vector<int> dp(n+1,0);
        dp[1] = nums[0];
        for(int i=2;i<=n;++i)
            dp[i] = max(dp[i-1],dp[i-2]+nums[i-1]);
        return dp[n];
    }
};

문제풀이 사고방식: 한 방에 대해 도둑은 두 가지 선택이 있다. 훔치거나 dp[i]=max(dp[i-1], dp[i-2]+nums[i-1]).

좋은 웹페이지 즐겨찾기