본문 바로가기
Problem Solving/BOJ

[Python]2156. 포도주 시식

by 부르르 2019. 4. 4.

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

 

2156번: 포도주 시식

효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규칙이 있다. 포도주 잔을 선택하면 그 잔에 들어있는 포도주는 모두 마셔야 하고, 마신 후에는 원래 위치에 다시 놓아야 한다. 연속으로 놓여 있는 3잔을 모두 마실 수는 없다. 효주는 될 수 있는 대로 많은 양의 포도주를 맛보기 위해서 어떤 포도주 잔을 선택해야 할지 고

www.acmicpc.net

 


 

1차원 DP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
= int(input())
WINE = [0]+[int(input()) for _ in range(n)]
 
DP = [0* (n+1)
DP[1= WINE[1]
 
if n >= 2:
    DP[2= WINE[1]+WINE[2# n 이 2보다 작을 땐 런타임에러 발생(index error)
 
for i in range(3, n+1):
    DP[i] = DP[i-1]
    DP[i] = max(DP[i], DP[i-2]+WINE[i])
    DP[i] = max(DP[i], DP[i-3]+WINE[i]+WINE[i-1])
print(DP[n])
cs

 

 

2차원 DP

1
2
3
4
5
6
7
8
9
10
= int(input())
WINE = [0]+[int(input()) for _ in range(n)]
DP = [[0]*3 for _ in range(n+1)]
 
for i in range(1, n+1):
    DP[i][0= max(DP[i-1][0], DP[i-1][1], DP[i-1][2])
    DP[i][1= DP[i-1][0]+WINE[i]
    DP[i][2= DP[i-1][1]+WINE[i]
 
print(max(DP[n]))
cs
728x90
반응형

댓글