목차

스티커 모으기(2)

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)