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

유존돌돌이·2022년 1월 3일
0

Programmers

목록 보기
134/167
post-thumbnail

문제 설명

N개의 스티커가 원형으로 연결되어 있습니다. 다음 그림은 N = 8인 경우의 예시입니다.
스티커_hb1jty.jpg
원형으로 연결된 스티커에서 몇 장의 스티커를 뜯어내어 뜯어낸 스티커에 적힌 숫자의 합이 최대가 되도록 하고 싶습니다. 단 스티커 한 장을 뜯어내면 양쪽으로 인접해있는 스티커는 찢어져서 사용할 수 없게 됩니다.

제한 사항

sticker는 원형으로 연결된 스티커의 각 칸에 적힌 숫자가 순서대로 들어있는 배열로, 길이(N)는 1 이상 100,000 이하입니다.
sticker의 각 원소는 스티커의 각 칸에 적힌 숫자이며, 각 칸에 적힌 숫자는 1 이상 100 이하의 자연수입니다.
원형의 스티커 모양을 위해 sticker 배열의 첫 번째 원소와 마지막 원소가 서로 연결되어있다고 간주합니다.

Code

class Solution {
    public int solution(int sticker[]) {
        if(sticker.length==1) return sticker[0];
        return Math.max(helper(0, sticker.length-1, sticker), helper(1,sticker.length , sticker));
    }
    
    public int helper(int s, int e, int[] sticker) {
		int[] dp = new int[sticker.length];
		int ret = 0;
		for(int i=s ; i<e ; i++) {
			if(i-2>=0) dp[i] = dp[i-2];
			if(i-3>=0) dp[i] = Math.max(dp[i-3], dp[i]);
			dp[i] += sticker[i];
			ret = Math.max(dp[i], ret);
		}
		return ret;
	}
    
}

0개의 댓글