본문 바로가기
Algorithm/baekjoon

[파이썬]baekjoon 2156: 포도주 시식

by 갈잃자 2023. 2. 16.

https://www.acmicpc.net/problem/2156

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규

www.acmicpc.net


dp문제

 

해당 잔을 마실때 전과 전전경우를 확인하여 최댓값을 구하면 된다!

N = int(input())
lst = [int(input()) for _ in range(N)]

dp = [0] * N
dp[0] = lst[0]

if N > 1:
    dp[1] = lst[0] + lst[1]

if N > 2:
    dp[2] = max(dp[1], lst[0] + lst[2], lst[1] + lst[2])

if N > 3:
    for i in range(3, N):
        # 지금 잔 수에서 2잔을 마셨을 때 최대 -> 지금 잔 + 이전 잔 + 하나 건너 뛰고 이전전전 잔
        # 지금 잔 수에서 1잔을 마셨을 때 최대 -> 지금 잔 + 하나 건너 뛰고 이전전 잔
        # 지금 잔 수에서 안 마셨을 때 최대 -> 이전 잔
        dp[i] = max(lst[i] + lst[i - 1] + dp[i - 3], lst[i] + dp[i - 2], dp[i - 1])

print(dp[-1])

댓글