티스토리 뷰

문제 링크입니다 : programmers.co.kr/learn/courses/30/lessons/12971?language=cpp

 

코딩테스트 연습 - 스티커 모으기(2)

N개의 스티커가 원형으로 연결되어 있습니다. 다음 그림은 N = 8인 경우의 예시입니다. 원형으로 연결된 스티커에서 몇 장의 스티커를 뜯어내어 뜯어낸 스티커에 적힌 숫자의 합이 최대가 되도록

programmers.co.kr

 

재귀로 풀려고 했는데 굉장히 어려웠는데...

 

잘 안되서 다른 사람들 풀이를 보면서 풀었다.

 

 

 

 

 

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> sticker)
{
    int answer = 0;
    int len = sticker.size();
    
    vector<int> cache(len, 0);
    
    if(len == 1) return sticker[0];
    else if(len == 2) return max(sticker[0], sticker[1]);
    else {
        cache[1] = sticker[1];
        for(int i = 2; i < len; i++) {
            cache[i] = max(cache[i - 1], cache[i - 2] + sticker[i]);
        }
        cache[0] = sticker[0];
        cache[1] = sticker[0];
        for(int i = 2; i < len - 1; i++) {
            cache[i] = max(cache[i - 1], cache[i - 2] + sticker[i]);
        }
        answer = max(cache[len - 1], cache[len - 2]);
    }
    

    return answer;
}

 

 

 

개발 환경 : vscode

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함