ebson

boj.kr/2156 포도주 시식 (silver1) 파이썬 풀이 본문

ALGORITHM STUDY WITH PYTHON/DP

boj.kr/2156 포도주 시식 (silver1) 파이썬 풀이

ebson 2023. 6. 4. 20:11

1. dp 리스트를 wines 리스트 길이 만큼 0으로 초기화한다.

2. wines의 길이 N이 1 이면 첫번째 포도주의 양을 출력한다.

3. N이 2이면 첫번째와 두번째 포도주의 양의 합을 출력한다.

4. N이 2보다 크면 dp[0]에 첫번째 포도주의 양, dp[1]에 첫번째와 두번째 포도주의 양의 합을 저장한다.

5. dp의 3번째 요소부터 마지막 요소까지 아래를 반복해 값을 갱신한다.

5.1. dp[i]에는 i번째 포도주를 마시지 않는 경우, i번째 포도주를 마시고 그 이전에도 마신 경우, i번째 포도주를 마시고 그 이전에는 마시지 않은 경우 중 최대값을 저장한다.

6. dp 리스트의 마지막 값을 출력한다.

 

N = int(input())
wines = [int(input()) for _ in range(N)]
dp = [0 for _ in range(N)]

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

 

dp[i]를 연속으로 3잔을 마실 수 없다는 조건을 충족하면서 최대로 포도주를 마시는 경우로 저장할 수 있다.

 

Comments