[백준] 2156 - 포도주 시식 (DP)

김영민·2024년 8월 2일
0

코딩테스트

목록 보기
12/32


코드

import sys
input = sys.stdin.readline
N = int(input())
wine = []
dp = [0]*100000

for _ in range(N):
    wine.append(int(input()))


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

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

elif N==2:
    dp[0] = (wine[0])
    dp[1] = (wine[1]+ wine[0])
elif N ==1 :
    dp[0] = wine[0]


print(max(dp))

풀이

  • 계단 오르기와 비슷한 문제로 볼 수 있으나, i번째 포도주를 안 마시는 경우가 있을 수 있는 게 차이점.
  • 3잔의 연속된 와인을 1,2,3이라고 했을 때, (1,3),(2,3),(1,2)의 경우가 있다.
  • 이런 류의 문제에서는 예외사항 선언 필수, 연속 3개가 불가능할 때 어떻게 max나 min 값을 구해야 하는지에 대한 생각하기.

0개의 댓글