백준_2156_포도주 시식(DP)

맹민재·2023년 4월 4일
0

알고리즘

목록 보기
32/134
n = int(input())
n_list = [0]*n
for i in range(n):
    n_list[i] = int(input())

dp = [0] * n
dp[0] = n_list[0]

if n == 1:
    print(dp[0])
elif n == 2:
    dp[1] = dp[0] + n_list[1]
    print(dp[1])
else:
    dp[1] = dp[0] + n_list[1]
    dp[2] = max(n_list[0]+n_list[2], n_list[1]+n_list[2], n_list[0]+n_list[1])
    for i in range(3, n):
        dp[i] = max(n_list[i] + dp[i-2],  n_list[i] + dp[i-3] + n_list[i-1], dp[i-1])

    print(dp[-1])

dp 계획은 이전의 2개의 와인을 마시고 와 현재 와인을 마실 수 없는 경우, 2번째 전의 와인과 현재의 와인을 마시는 경우, 3번째 전의 와인을 마신 후 건너띄어서 이전 와인과 현재 와인을 마실 수 있는 경우 이렇게 3개의 경우 중 최대 값으로 구한다.


profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글