문제
알고리즘
- dp를 통해 포도주의 양을 리스트로 표현한다.
- 현재 포도주를 안 먹는 경우와 연속으로 포도주를 먹는 경우와 이전 포도주를 안 먹는 경우를 비교하여 dp 리스트의 포도주의 양을 넣는다.
코드
import sys
n = int(sys.stdin.readline())
m = [0] * 10001
for k in range(1, n + 1):
m[k] = int(sys.stdin.readline())
dp = [0] * 10001 # 각 잔까지 먹을 수 있는 포도주 양
dp[0] = m[0]
dp[1] = m[1]
dp[2] = m[1] + m[2]
# 반복문을 통해 각 잔의 최대 포도주 양을 구한다.
for i in range(3, n + 1):
# 현재 포도주를 안먹는 경우, 연속적으로 포도주를 먹는 경우, 이전 포도주를 안먹고 현재 포도주를 먹는경우
dp[i] = max(dp[i - 1], dp[i - 3] + m[i - 1] + m[i], dp[i - 2] + m[i])
print(dp[n])
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 2193번(파이썬): 이친수 (0) | 2021.11.28 |
---|---|
[baekjoon] 백준 1149번(파이썬): RGB 거리 (0) | 2021.11.27 |
[baekjoon] 백준 1912번(파이썬): 연속합 (0) | 2021.11.25 |
[baekjoon] 백준 1932번(파이썬): 정수 삼각형 (0) | 2021.11.24 |
[baekjoon] 백준 11053번(파이썬): 가장 긴 증가하는 부분 수열 (0) | 2021.11.23 |