ps | |
---|---|
링크 | programmers.co.kr/… |
출처 | 프로그래머스 |
문제 번호 | 12971 |
문제명 | 스티커 모으기(2) |
레벨 | Level 4 |
분류 |
동적계획법 |
시간복잡도 | O(n) |
인풋사이즈 | n<=100,000 |
사용한 언어 | Python |
해결날짜 | 2020/12/19 |
"""Solution code for "Programmers 12971. 스티커 모으기(2)".
- Problem link: https://programmers.co.kr/learn/courses/30/lessons/12971
- Solution link: http://www.teferi.net/ps/problems/programmers/12971
"""
def solution(sticker):
if len(sticker) == 1:
return sticker[0]
dp1, dp1_cur = [0, sticker[0]], max(sticker[0], sticker[1])
dp2, dp2_cur = [0, 0], sticker[1]
for m in sticker[2:]:
dp1[-1], dp1[-2] = dp1_cur, dp1[-1]
dp2[-1], dp2[-2] = dp2_cur, dp2[-1]
dp1_cur = max(dp1[-1], dp1[-2] + m)
dp2_cur = max(dp2[-1], dp2[-2] + m)
return max(dp1[-1], dp2_cur)