# 계단 오르기 import sys input = sys.stdin.readline def solution(): n = int(input().rstrip()) score = [0] * (n+1) for i in range(1, n+1): score[i] = int(input().rstrip()) dp = [0] * (n+1) dp[1] = score[1] if n >= 2: dp[2] = score[1] + score[2] for i in range(3, n+1): dp[i] = max(dp[i-3]+score[i-1]+score[i], dp[i-2]+score[i]) print(dp[n]) return solution() """ 걸린 시간: 20분 시간 복잡도: 각 계단을 한번씩 확인하며 dp를 채우기 때문에 O(n)이다. 해설: 현재 보는 계단을 오려면 어떻게 올 수 있는지 생각했을 때 방향이 한쪽으로 정해져있다. 무조건 올라오는 것이기 때문에 dp를 쓰면 된다. 현재 칸으로 올 수 있는 경우의 수는 2칸 전에서 올라오는 것과 1칸 전에서 올라오되, 그 전에 1칸 점프가 아니어야 한다.(3칸연속 방지) 따라서 2번째 경우의 수는 2번째 전 상황까지 강제를 해줘야 한다. 따라서 dp[i-3]+score[i-1]+score[i]가 되는 것이다. 또한 i-3을 접근하려면 i가 최소 3부터여야 하기 때문에 dp[1], dp[2]까지는 수동으로 설정해줘야 한다. 마지막으로 n은 자연수이므로 1일수도 있다. 이때는 dp[2] 설정이 안되므로 조건문을 달아준다. """