> 문제
문제 : [스티커 모으기(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