프로그래머스 스티커 모으기(2) (Java,자바)

jonghyukLee·2022년 9월 13일
0

이번에 풀어본 문제는
프로그래머스 스티커 모으기(2) 입니다.

📕 문제 링크

❗️코드

class Solution {
    public int solution(int sticker[]) {
        int answer = 0;
        int len = sticker.length;

        if (len == 1) return sticker[0];

        int [] dp = new int[len];

        // 첫 번째 스티커를 뗐을때
        dp[0] = sticker[0];
        dp[1] = dp[0];
        for (int i = 2; i < len - 1; i++) {
            dp[i] = Math.max(dp[i - 2] + sticker[i], dp[i - 1]);
        }
        answer = dp[len - 2];

        // 첫 번째 스티커를 안뗐을때
        dp[0] = 0;
        dp[1] = sticker[1];
        for (int i = 2; i < len; i++) {
            dp[i] = Math.max(dp[i - 2] + sticker[i], dp[i - 1]);
        }
        answer = Math.max(answer, dp[len - 1]);
        return answer;
    }
}

📝 풀이

문제에 주어진 조건에 맞게 스티커를 떼서, 최댓값을 출력하는 문제입니다.
dp 배열의 각 인덱스는 해당 위치까지의 최댓값을 의미하며, idx-2까지의 최댓값에서 현재 위치의 스티커를 더한 값과, 현재 위치를 뽑지 않는 idx-1 값 중 큰 값을 선택하여 dp배열을 완성하면 됩니다.
인덱스 범위 때문에 처음과 마지막 인덱스를 비교하기 힘들어서, 첫 번째 스티커를 뽑았을 경우와 뽑지 않았을 경우 두 가지로 나누어 dp 배열을 완성시키고, 마지막에 비교하여 출력했습니다.

📜 후기

쉬워보였는데, 첫 번째와 마지막 인덱스를 어떻게 풀어내야 할지 감이 오지 않아서 너무 어렵게 풀었습니다 ㅠ

profile
머무르지 않기!

0개의 댓글