알고리즘(python)/기본

[Python]동적계획법 백준 2156

개발일기 2020. 1. 10. 15:23
반응형

   문제

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


이전문제들과 비슷하다고 볼수있다.

계단문제에서 마지막 계단은 꼭 밟아야된다는 조건이 빠진 문제라고 볼 수 있겠다.

마지막 와인을 마시지 않았을때와

마지막와인을 마시고 이전와인을 마셧을때

마지막 와인을 마시고 전전와인을 마셧을때로 나눌수 있다.


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
import sys
n=int(sys.stdin.readline())
wine=[int(sys.stdin.readline()) for _ in range(n)]
result=[0 for _ in range(n)]
 
 
def max_wine(n):
    result[0]=wine[0]
    if n==1:
        return
    result[1]=wine[0]+wine[1]
    if n==2:
        return
    result[2]=max(result[1],wine[2]+result[0],wine[2]+wine[1])
    if n==3:
        return
    for i in range(3,n):
        #마지막와인을 마시지 않았을때
        #마지막와인과 이전와인 마셧을때
        #마지막와인과 전전와인 마셧을때
        result[i]=max(result[i-1],wine[i]+wine[i-1]+result[i-3],wine[i]+result[i-2])
 
 
max_wine(n)
print(result[n-1])

cs






반응형