[개발]programmers/Python3

Lv.3_스티커모으기(2)

dowon 2024. 7. 11. 20:10

https://school.programmers.co.kr/learn/courses/30/lessons/12971?language=python3

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(sticker):
    if len(sticker) <= 3:
        return max(sticker)
    
    answer = 0

    dp1 = [0 for _ in range(len(sticker))]
    dp2 = [0 for _ in range(len(sticker))]
    
    dp1[0], dp1[1] = sticker[0], sticker[0]
    dp2[0], dp2[1] = 0, sticker[1]
    
    for i in range(2, len(sticker)):
        if i == len(sticker)-1:
            dp2[i] = max(dp2[i-1], sticker[i]+dp2[i-2])
        else:
            dp1[i] = max(dp1[i-1], sticker[i]+dp1[i-2])
            dp2[i] = max(dp2[i-1], sticker[i]+dp2[i-2])
    
    answer = max(dp1[len(dp1)-2], dp2[len(dp2)-1])

    return answer

 

다이나믹 프로그래밍을 사용하면 되는 문제였다

피보나치 수열을 기억하자!