기록하는 개발자

[프로그래머스][코딩테스트 고득점 Kit][java] 도둑질 본문

Algorithm

[프로그래머스][코딩테스트 고득점 Kit][java] 도둑질

밍맹030 2023. 8. 21. 15:54
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/42897

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

전체 코드

class Solution {
    public int solution(int[] money) {
        // 첫 번째 집부터 시작
        int[] DP1 = new int[money.length]; 
        DP1[0] = money[0];
        DP1[1] = money[0];
        
        // 첫 번째 집을 넘기고 두 번째 집부터 시작
        int[] DP2 = new int[money.length]; 
        DP2[1] = money[1];
        
        for(int i=2; i<money.length; i++){
        // dp[i] = max(i-1번 째 집까지의 최댓값, i-2번 째 집까지의 최댓값+현재 집)
            DP1[i] = Math.max(DP1[i-1], DP1[i-2]+money[i]);
            DP2[i] = Math.max(DP2[i-1], DP2[i-2]+money[i]);
        }
        
        // 첫 번째 집부터 시작한 경우 마지막 집 도둑질이 불가하고
        // 두 번째 집부터 시작한 경우 마지막 집 도둑질이 가능하므로
        // 위 두 가지 경우 중 최댓값을 return
        return Math.max(DP1[money.length-2],DP2[money.length-1]);
    }
}
728x90