[BOJ2156] 포도주 시식
Updated:
가장 많은 포도주를 마실 수 있도록 하는 법
- 포도주 잔 선택하면, 마신 후 그 자리에
- 연속으로 놓여있는 3잔 마시기 불가능
- 1부터 n까지 번호 붙은 포도주가 순서대로 테이블 위에
- 가장 많이 마실 수 있는 양
입력
- 포도주 잔 개수 n(1<= n <= 10,000)
- 포도주 양은 1,000 이하 음수 아닌 정수
출력
- 최대로 마실 수 있는 포도주 양
설계
- 연속 세 잔 마시기 불가능하므로, (1) 두 잔까지 연속 가능, (2) 아니면 두 칸 뒤의 잔 마시기
- dp[i] = max(wine[i] + wine[i-1] + dp[i-3], wine[i] + dp[i-2])
- Boj2579 계단오르기랑 핵심 알고리즘 같음
피드백
- 계단오르기랑 조금 다른 건, 포도주는 두 잔 연속 스킵도 가능하다는 것 TestCase) 100, 200, 1, 3, 4, 400 -> 최대값 (703이 아닌 704)
- 따라서, 각 포도주의 위치에서의 최대값을 계속 갱신 필요 (마시지 않아도)
- dp[i] = max(dp[i], dp[i-1]) 현재와 이전 값 비교하여 갱신
How I solved(click to github)
ref :
BOJ2156
Leave a comment