문제
https://www.acmicpc.net/problem/2579
풀이
# 백준 / 실버3 / 계단 오르기
n = int(input())
stairs = [0] * 301
for i in range(1,n+1):
stairs[i] = int(input())
dp = [0] * 301
dp[1] = stairs[1]
dp[2] = stairs[1] + stairs[2]
dp[3] = max(stairs[1] + stairs[3], stairs[2] + stairs[3])
for i in range(4, n+1):
dp[i] = max(dp[i-3] + stairs[i-1] + stairs[i], dp[i-2] + stairs[i])
print(dp[n])
dp로 풀 수 있는 문제이다.
점화식을 세우자면 1. 전단계에서 바로 오는 경우 2. 전전단계에서 오는 경우 가 있는데
3번 연속으로 계단을 오를 수 없다는 조건이 있으므로, 전단계에서 오는 경우는 전단계의 전전단계에서 와야한다. (dp[i-3])
이 두 과정을 고려한 최대값을 구하면서 dp[i]를 구할 수 있다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 1748 - 수 이어 쓰기 1 (0) | 2024.06.06 |
---|---|
백준 1003 - 피보나치 함수 (0) | 2024.06.05 |
백준 1120 - 문자 (0) | 2024.06.03 |
백준 28278 - 스택 2 (0) | 2024.06.03 |
백준 1920 - 수 찾기 (0) | 2024.05.28 |