[프로그래머스] Level3 - 스티커 모으기(2)

 
by 박신종

> 문제

문제 : [스티커 모으기(2)]



> 문제풀이

첫 번째 스티커부터 뜯어낼 경우와 두번째 스티커부터 뜯어낼 경우를 나눠 DP로 풀이 하였다.

소스는 다음과 같다.


import java.util.*;
class Solution {
    public int solution(int sticker[]) {
        if(sticker.length == 1) return sticker[0];
        int[] dp1 = new int[sticker.length];
        int[] dp2 = new int[sticker.length];
        
        dp1[0] = sticker[0];
        dp1[1] = sticker[0];
        for(int i=2; i<sticker.length-1; i++){
            dp1[i] = Math.max(dp1[i-2] + sticker[i], dp1[i-1]);
        }
        dp2[1] = sticker[1];
        for(int i=2; i<sticker.length; i++){
            dp2[i] = Math.max(dp2[i-2] + sticker[i], dp2[i-1]);
        }
        
        return Math.max(dp1[sticker.length-2], dp2[sticker.length-1]);
    }
}




문제 출처 : Programmers