728x90
반응형
N = int(input())
wine = [0]
maxi = [0]*(N+1)
for i in range(1, N+1):
wine.append(int(input()))
if i < 3:
maxi[i] = sum(wine)
else:
target = []
target.append(maxi[i-3]+wine[i-1]+wine[i])
target.append(maxi[i-2]+wine[i])
target.append(maxi[i-1])
maxi[i] = max(target)
print(maxi[-1])
다이나믹 프로그래밍 문제다.
처음에 DFS로 풀었는데 시간초과가 떠서 다시 풀었다.
포도주가 1잔 또는 2잔이 있을 때에는 그냥 모두 다 마시면 된다.
하지만 3잔째 부터는 선택을 해야 한다.
선택에는 3가지 종류가 있다.
예를들어 5잔이 있다고 가정한다면
1. 2번째 잔까지의 최댓값 + 3번째 잔은 마시지 않고 + 4번째와 5번째 잔을 마신다.
2. 3번째 잔까지의 최댓값 + 4번째 잔은 마시지 않고 + 5번째 잔을 마신다.
3. 4번째 잔까지의 최댓값 + 5번째 잔을 마시지 않는다.
이 중에 max를 고르면 된다.
그리고 이 과정을 3번째 잔부터 n번째 잔까지 결과를 기록하며 나아간다.
728x90
반응형
'Programming > Python' 카테고리의 다른 글
빅데이터분석기사 실기 대비 명령어 정리 (0) | 2023.05.29 |
---|---|
플로이드 스타인버그 디더링 (Floyd–Steinberg dithering) 파이썬으로 구현하기 (0) | 2020.11.20 |
[파이썬] 백준 17140번: 이차원 배열과 연산 (0) | 2020.05.28 |
[파이썬] 백준 9251번: LCS (0) | 2020.05.25 |
[파이썬] 백준 6593번: 상범 빌딩 (0) | 2020.05.18 |
댓글