백준 2156번 "포도주 시식"
문제
풀이
연속으로 놓여져 있는 세잔을 연속해서 마실 수 없다에 주목해야하는 문제이다.
이 조건으로 3가지 경우를 고려해야 하는것을 알 수있는데
-
i-1번째 잔을 마시지 않고 i번째 잔을 마신경우
arr[i] + dp[i-2] -
i-1번째 잔을 마시고 연속해서 i번째 잔을 마신경우()
arr[i] + arr[i-1] + dp[i-3] -
i번째 잔을 마시지 않고 넘어가는 경우
dp[i-1]
이 세가지 조건 중 최대값을 골라 dp배열에 넣고 다음 반복으로 넘어가야 한다.
Python 코드
import sys
input = sys.stdin.readline
n = int(input())
arr = [int(input()) for i in range(n)]
dp=[arr[0]]
if(n>1):
dp.append(arr[0]+arr[1])
for i in range(2, n):
# i가 2일 경우 dp[i-3]이 인덱스에서 벗어남 -> dp[i-3]값을 0으로 놓고 연산
if i == 2:
dp.append(max(arr[i]+dp[i-2], arr[i]+arr[i-1], dp[i-1]))
# 이러한 조건문을 쓰고싶지 않을 땐 dp배열 첫 요소에 0을 넣고 인덱스값을 변경하면 된다.
else:
dp.append(max(arr[i]+dp[i-2], arr[i]+arr[i-1]+dp[i-3], dp[i-1]))
print(dp[n-1])
Author And Source
이 문제에 관하여(백준 2156번 "포도주 시식"), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kgpaper/백준-2156번-포도주-시식저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)