2156. 포도주 시식
2156번: 포도주 시식
효주는 포도주 시식회에 갔다. 그 곳에 갔더니, 테이블 위에 다양한 포도주가 들어있는 포도주 잔이 일렬로 놓여 있었다. 효주는 포도주 시식을 하려고 하는데, 여기에는 다음과 같은 두 가지 규
www.acmicpc.net
- 풀이
- 3잔 이상 연속으로 마실 수 없다!! << 핵심 포인트
- 앞의 선택 때문에 현재가 무엇이 최선인지 비교해서 확인을 해봐야 알 수 있음
- → 그리디가 아니라 DP인 것을 알 수 있음
- 현재 잔을 추가할때
- i번째 잔을 안마신다면?
- i-1, i-2 번째 잔을 다 마셔도 됨 dp[i-1]
- i번째 잔을 아마신다면?
- i-1번째 잔을 마신다면 i-2번째 잔을 마실 수 없음 → dp[i-3]+A[i-1]+A[i]
- i-1번째 잔을 마시지 않는다면? → dp[i-2]+A[i]
- i번째 잔을 안마신다면?
- 3잔 이상 연속으로 마실 수 없다!! << 핵심 포인트
n = int(input())
grapes = [0]+[int(input()) for _ in range(n)]
if n < 3:
print(sum(grapes))
exit()
dp = [0 for _ in range(n+1)]
dp[1] = grapes[1]
dp[2] = sum(grapes[1:3])
for i in range(3, n+1):
dp[i] = max(dp[i-2]+grapes[i], dp[i-3]+grapes[i-1]+grapes[i], dp[i-1])
print(dp[n])
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][정렬] 18870. 좌표 압축 (0) | 2024.01.10 |
|---|---|
| [백준][부분합] 2632. 피자판매 (0) | 2024.01.09 |
| [백준] [그리디] 1080. 행렬 📍 (1) | 2024.01.05 |
| [그리디] 2864. 5와 6의 차이 (0) | 2024.01.04 |
| [백준] [DP] 1947. 선물 전달 (2) | 2024.01.03 |