알고리즘

프로그래머스 도둑질 (JAVA)

박카스마시며코딩 2023. 7. 15. 19:29

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

 

프로그래머스

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

programmers.co.kr

 

저는 DP를 통해 문제를 해결하였습니다.

dp1는 첫번째 털고, 마지막은 털지 않도록 하였습니다.

dp2는 첫번째를 안 털고, 마지막은 털 수 있도록 하여 문제를 해결하였습니다.

 

package Programmers.ETC;

public class 도둑질 {
    public int solution(int[] money) {
        int answer = 0;
        int[] dp1 = new int[money.length];
        int[] dp2 = new int[money.length];
        dp1[0] = money[0];
        dp1[1] = Math.max(money[0],money[1]);
        dp2[1] = money[1];
        int size = money.length;
        for(int i = 2 ; i < size ; i++){
            dp2[i] = Math.max(dp2[i-1],dp2[i-2]+money[i]);
            if(i == size-1){
                continue;
            }
            dp1[i] = Math.max(dp1[i-1],dp1[i-2]+money[i]);
        }
        answer = Math.max(dp1[size-2],dp2[size-1]);
        return answer;
    }
}