본문 바로가기

알고리즘구현능력/문제해결능력

[java] 백준/2156 포도주 시식

내가 포도주 시식과 계단오르기 문제를 비교해서 해본 결과 이런 문제의 접근은 마지막에서 보는것이 좋은 거같다.

다이나믹 프로그래밍을 해야하므로..

마지막의 세부분 oox , xoo , oxo 은 무조건 이 세개중에 하나이다...

oox는 dp[n] = dp[n-1]

xoo는 dp[n] = dp[n-3]+wine[n]+wine[n-1]

oxo는 dp[n] = dp[n-2]+wine[n] 이다.

이 세가지중에 제일 max값을 저장하는 식으로 문제를 풀면 된다.

dp[0] = wine[0]

dp[1] = wine[1]+wine[0]

dp[2]  = Max(wine[0]+wine[1], wine[1]+wine[2], wine[0]+wine[2]) 

이 세가지는 미리 구해놓고 시작해야하며 

n의 크기에 따른 반례를 미리 정해두고 작업하길 바란다..