1. 문제
2156번
2. 코드
- 파이썬에서는 C언어와 같이 변수나 변수 공간을 미리 정의 하지 않고 동적으로 할당해준다.
- 편하긴 하지만 index 문제 등이 발생할 수 있으므로 미리 선언하는 습관을 들이자!
num_ = [0 for _ in range(99999)]
dp = [0 for _ in range(999999)]
N = int(input())
for i in range(N):
num_[i] = int(input())
dp[0] = num_[0]
dp[1] = num_[0] + num_[1]
'''
dp[2]는 3개의 숫자 중 3연속이 되지 않도록 고르는 문제이므로,
3개 중 2개를 뽑는 총 3가지 경우의 수가 있다.
3가지 경우의 수 중 합이 최대가 되는 case를 바인딩 한다.
- max() 메서드 이용
'''
dp[2] = max(
(num_[0] + num_[1]),
(num_[0] + num_[2]),
(num_[1] + num_[2])
)
for n in range(3, N):
a = dp[n-3] + num_[n-1] + num_[n]
b = dp[n-2] + num_[n]
c = dp[n-1]
dp[n] = max(a, b, c)
print(max(dp))