

문제 푸는 아이디어

밑에서부터 올라갈 계단에 주목하는 것이 아니라, 계단에 올라와서 어느 계단에서 왔는지에 주목하자
① 한 칸 앞 계단에서 올라온 경우
dp(n) = stairs[n] + stairs[n-1] + dp(n-3)
② 두 칸 앞 계단에서 올라온 경우
dp(n) = stairs[n] + dp(n-2)
그리고 이 두 가지 경우 중 최댓값을 구하면 된다.
N = int(input())
stair = [0]
for _ in range(N):
stair.append(int(input()))
if N == 1:
print(stair[1])
else:
dp = [0] * (N+1)
dp[1] = stair[1]
dp[2] = stair[1] + stair[2]
for i in range(3, N+1):
dp[i] = max(dp[i-3]+stair[i-1]+stair[i], dp[i-2]+stair[i])
print(dp[N])'PS' 카테고리의 다른 글
| [백준 - Swift] 1874 스택 수열 (0) | 2023.01.19 |
|---|---|
| [프로그래머스 - Swift] 다리를 지나는 트럭 (0) | 2023.01.19 |
| [ 백준 1003 - 피보나치 함수 ] (0) | 2021.08.10 |
| [백준 11726 - 2 x n 타일링] DP (0) | 2021.08.09 |
| DP ( Dynamic Programming, 동적 계획법 ) (0) | 2021.08.09 |