num = int(input())
arr= [int(input()) for _ in range(num)]
dp = [False for _ in range(num)]
if num == 1 :
print(arr[0])
else :
dp[0] = arr[0]
dp[1] = arr[0] + arr[1]
for i in range(2, num) :
dp[i] = max(dp[i - 2] + arr[i], dp[i-3] + arr[i-1] + arr[i])
dp[i] = max(dp[i], dp[i-1])
print(dp[-1])
하나 건너뛰면서 선택하던 기본 dp 문제들에서 한단계 업그레이드 된 문제.
해결 아이디어
1) 현재의 상황에서 생각하기
2) 만약 현재 선택이 건너뛰고 첫 선택이라면 dp[i-2] + arr[i]
3) 만약 이전꺼 선택하고 연속해서 선택중이라면 dp[i-3] + arr[i-1] + arr[i]
4) dp에는 각 스탭의 최댓값이 들어있어야 하므로 dp[i] = max(dp[i], dp[i-1])
'컴퓨터 > 코테' 카테고리의 다른 글
카카오 기출 - 카드 뒤집기 (0) | 2021.08.27 |
---|---|
카카오 기출 - 표편집 (0) | 2021.08.27 |
카카오 기출 - 키패드 누르기 (0) | 2021.08.24 |
카카오 2021 기출 - 광고삽입 (0) | 2021.08.23 |
카카오 2021 기출 - 합승 택시요금 [워셜 플로이드] (0) | 2021.08.23 |