본문 바로가기
정리/알고리즘

DP - 도둑질

by Hudini30 2022. 3. 9.

프로그래머스 (DP) - 도둑질

해당 문제는 원형의 집 배치라는 것을 생각하고, 첫번째 집을 선택하고, 마지막집을 선택하지 않은 경우, 첫번째 집을 선택하지 않은 경우로 나누어, dp[n] = Max(dp[n-2] + money[n], dp[n-1]) 이라는 기준으로 계산(2번째 전집을 털고, 현재 집을 털 경우와 이 전집을 턴경우) 식을 바탕으로 2가지 경우를 구한 후 두가지중 큰 값을 선택하여 값을 구했습니다.

public int solution(int[] money) {
        int homeLength = money.length;

        int[] dpFirstChoice = new int[homeLength];
        int[] dpFirstNotChoice = new int[homeLength];

        dpFirstChoice[0] = money[0];
        dpFirstChoice[1] = Math.max(money[0], money[1]);

        dpFirstNotChoice[1] = money[1];

        for (int i = 2; i < homeLength; i++ ) {
            dpFirstNotChoice[i] = Math.max(dpFirstNotChoice[i-1], dpFirstNotChoice[i - 2] + money[i]);
            if (i == homeLength -1) {
                dpFirstChoice[i] = dpFirstChoice[i - 1];
                break;
            } else {
                dpFirstChoice[i] = Math.max(dpFirstChoice[i-1], dpFirstChoice[i - 2] + money[i]);
            }
        }

        return Math.max(dpFirstNotChoice[homeLength - 1], dpFirstChoice[homeLength - 1]);
    }

'정리 > 알고리즘' 카테고리의 다른 글

DFS - 여행경로  (0) 2022.03.11
DFS/BFS - 타겟 넘버  (0) 2022.03.10
DP - 등굣길  (0) 2022.03.08
DP - 정수 삼각형  (0) 2022.03.07
DP - N으로 표현  (0) 2022.03.04

댓글