티스토리 뷰

 

풀이

DP 문제이다. 입력 데이터를 처음부터 살펴보면서 선택의 최댓값을 찾을 것이다.

문제 조건에서 3번 연속으로 포도 잔을 선택할 수 없기 때문에 다음과 같은 경우를 생각해본다.

  1. 현재가 0번 연속, 즉 i-2, i-1번이 선택되었다
  2. 현재가 1번 연속, 즉 i-2, i 번이 선택되었다
  3. 현재가 2번 연속, 즉 i-1, i 번이 선택되었다

변수 설명

  • data : i 번째 입력 값
  • dp : i 번째 최댓값

Python3 Code

import sys

n = int(sys.stdin.readline())
data = [0] + [int(sys.stdin.readline()) for _ in range(n)] + [0]

dp = [0] * (n+2) # i번째 최댓값
dp[1], dp[2] = data[1], data[1] + data[2]

for i in range(3, n+1):
    x = dp[i-1] # 연속 0
    y = dp[i-2] + data[i] # 연속 1
    z = dp[i-3]+ data[i-1] + data[i]# 연속 2
    dp[i] = max(x, y, z)

print(dp[n])

 

 

'Computer Science > Algorithm' 카테고리의 다른 글

[BOJ] 11053 - 가장 긴 증가하는 부분 수열  (0) 2020.06.16
[BOJ] 2193 - 이친수  (0) 2020.06.14
[BOJ] 1463 - 1로 만들기  (0) 2020.06.13
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함