티스토리 뷰


일렬로 놓여 있는 포도주를 마실 수 있는 최대의 양을 구하는 문제 DP로 풀이가 가능하다. 규칙은 아래와 같다.

  1. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다.
  2. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다.

위 규칙에 따르면 포도주를 마실 수 없는 경우가 나타나는데 이를 3가지로 나눌 수 있다.

 

1. 현재 포도주를 마시지 않는다.

2. 이전의 포도주를 마시지 않는다.

3. 2번째 이전의 포도주를 마시지 않는다.

 

이 세 가지 경우를 각각 적어도 하나만 만족한다면 위 2가지 규칙을 만족한다.

 

소스 코드

파이썬

from sys import stdin
readline = stdin.readline

N = int(readline())
wines = [int(readline()) for _ in range(N)]

def dp():
    d = [0, wines[0], wines[0]]
    for i in range(1, N):
        # 0: 현재 포도주를 마시지 않는다
        # 1: 첫 번째 이전 포도주를 마시지 않는다
        # 2: 두 번째 이전 포도주를 마시지 않는다
        d = [max(d), d[0]+wines[i], d[1]+wines[i]] 

    return max(d)

print(dp())
728x90

'PS > 백준' 카테고리의 다른 글

[백준] 10844 쉬운 계단 수  (0) 2021.02.09
[백준] 2294 동전2  (0) 2021.02.07
[백준] 10835 카드게임  (0) 2021.02.06
[백준] 13460 구슬탈출2  (0) 2021.02.05
[백준] 1300 K번째 수  (0) 2021.02.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함