자료구조&알고리즘
백준 | [파이썬 Python] 2156 포도주 시식
두잇 두두
2024. 4. 29. 23:29
728x90
배경
아따 포도주를 저렇게 많이 먹을 수 있는게 부럽다
시식이라면 꽁짜겠지 포도주로 취해보고 싶다
초록병 이스 마이 라이프
https://www.acmicpc.net/problem/2156
코드
n=int(input())
drink = []
for _ in range(n):
drink.append(int(input()))
dy=[0]*10001
drink.insert(0,0)
dy[1] = drink[1]
dy[2] = drink[1]+drink[2]
dy[3] = max(drink[3]+drink[1], drink[3]+drink[2], dy[2])
for i in range(4, n+1):
dy[i] = max(dy[i-3]+drink[i]+drink[i-1], drink[i]+dy[i-2], dy[i-1])
print(max(dy))
설명
조건에 연속으로 3잔을 마실 수 없다가 있다.
이를 위해서 지금 마시려는 포도주를 마시는게 이득인가 아닌가를 판별하면 된다.(대단한 술꾼 디오니소스인가?)
for문을 보게 되면 현재 index에 이번에 마시고 저번에 마신다면(i-1) dynamic list는 저저저번(dy-3)에 마신게 들어가야한다( 연속으로 3번을 마시면 안되니까)
또는 이번에 마시고 저저번에 마신게 더 이득인지 확인하거나
바로 저번에 마신게 이득인지 확인하면 된다
현재의 포도주를 꼭 마셔라는 법은 없었기 때문이다
ex) drink[3]이 1이라고 생각해보자 안마시는게 더 낫다