Skip to content

Sticker collection (2)

1. Problem

해당 문제는 여기에서 확인하실 수 있습니다.

2. Answer

def solution(sticker):
    n = len(sticker)
    
    # 스티커가 1개뿐이면 그대로 반환
    if n == 1:
        return sticker[0]
    
    # 첫 번째 스티커를 사용하는 경우 (마지막 스티커는 사용 불가)
    dp1 = [0] * n
    dp1[0] = sticker[0]
    dp1[1] = max(sticker[0], sticker[1])
    for i in range(2, n - 1):
        dp1[i] = max(dp1[i - 1], dp1[i - 2] + sticker[i])
    
    # 첫 번째 스티커를 사용하지 않는 경우 (마지막 스티커 사용 가능)
    dp2 = [0] * n
    dp2[1] = sticker[1]
    for i in range(2, n):
        dp2[i] = max(dp2[i - 1], dp2[i - 2] + sticker[i])
    
    # 두 경우 중 최대값 반환
    return max(dp1[n - 2], dp2[n - 1])