Lewis's Tech Keep

[프로그래머스] 도둑질 본문

Java/알고리즘

[프로그래머스] 도둑질

Lewis Seo 2021. 2. 24. 05:37

 - dp  컨셉을 좀 더 자세히 파고 들어야 했다.

 

 - 첫 차례에 시작한 경우 & 첫 차례에는 시작하지 않고 두 번째부터 시작한 경우의 최대값을 구해야 했다.

 - 세 번째부터는 첫 차례의 값을 가지고 + 세 번째 값을 더 하는 것이 당연히 더 크거나 같다 (모든 수가 0이상이므로)

 - 네 번째부터는 두 번째부터의 값을 가지고 + 네 번째 값 더하는 것이 당연히 더 크거나 같다 (모든 수가 0이상이므로)

 

  - 따라서 두 가지 경우에 대해서만 계산해서 최대값을 구해주면 되는 문제였다. 

 

더보기
class Solution {
    public int solution(int[] money) {
        // bottom-up 
        // 0번째 최대 비용 계산 -> 1번째 최대비용 계산
        // 0번째 부터 계산
        int value1 = money[0];
        int value2 = money[0];
        for(int i=2; i< money.length-1; i++ ) {
            int temp1 = value1 + money[i];
            int temp2 = value2;
            if(temp1 > temp2) {
                value2 = temp1;
                value1 = temp2;
            } else {
                value1 = temp2;
                value2 = temp2;
            }
        }
        int answer1 = value2;
        // 0번째 최대 비용 계산 -> 1번째 최대비용 계산
        // 0번째 스킵한 계산
        value1 = 0;
        value2 = money[1];
        for(int i=2; i< money.length; i++ ) {
            int temp1 = value1 + money[i];
            int temp2 = value2;
            if(temp1 > temp2) {
                value2 = temp1;
                value1 = temp2;
            } else {
                value1 = temp2;
                value2 = temp2;
            }
        }
        int answer2 = value2;
        return answer1 > answer2 ? answer1 : answer2;
    }
}

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

[백준] 1로 만들기  (0) 2021.03.04
[프로그래머스] 정수 삼각형  (0) 2021.02.25
[프로그래머스] 2xn 타일링  (0) 2021.02.23
[프로그래머스] 게임 맵 최단거리  (0) 2021.02.18
[프로그래머스] 단어 변환  (0) 2021.02.18
Comments