알고리즘/프로그래머스
프로그래머스 - 스티커 모으기(2)
시나모온
2020. 9. 6. 08:36
문제 링크입니다 : 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
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~