코딩테스트/백준 (python)

백준 / 2156번 / 포도주 시식 / python 파이썬

seulll 2024. 11. 7. 17:24

 

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

 

 

처음에 제출한 코드는 런타임 에러가 발생하였다.

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

dp = [0] * 10000
dp[0] = lst[0]
dp[1] = lst[0] + lst[1]
dp[2] = max(lst[0] + lst[2], lst[1] + lst[2], dp[1])

for i in range(3, n):
    dp[i] = max(dp[i-3] + lst[i-1] + lst[i], dp[i-2] + lst[i], dp[i-1])

print(max(dp[-1]))

 

 

 n이 3보다 작을 때의 예외 처리를 하여 다시 제출했더니 통과하였다.

 

나의 풀이

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

dp = [0] * n

if n == 1:
    print(lst[0])
elif n == 2:
    print(lst[0] + lst[1])
else:
    dp[0] = lst[0]
    dp[1] = lst[0] + lst[1]
    dp[2] = max(lst[0] + lst[2], lst[1] + lst[2], dp[1])

    for i in range(3, n):
        dp[i] = max(dp[i-3] + lst[i-1] + lst[i], dp[i-2] + lst[i], dp[i-1])

    print(dp[-1])