🗂️ 문제
링크: https://www.acmicpc.net/problem/2579
💡 접근법
계단을 어떻게 올라갈까?가 아니라 계단을 어떻게 올라왔을까? 라는 관점에서 접근해야 한다.
n번째 계단에 올라오기 위해서는 두 가지 경우가 있다. n-1번째 계단으로 오는 경우와 n-2번째 계단으로 오는 경우이다.
- n-1번째 계단으로 오는 경우에는 dp[n] = dp[n-3] + stairs[n-1] + stairs[n] 이다.
- n-2번째 계단으로 오는 경우에는 dp[n] = dp[n-2] + stairs[n] 이다.
이 중에서 더 큰 수가 dp[n]가 된다.
👀 배운 코드
import sys
N = int(sys.stdin.readline())
stairs = [0] * 301
for i in range(1, N+1):
stairs[i] = int(sys.stdin.readline())
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])
🧐 배운 점
- 올라간 계단 시점에서 어떻게 계단을 올라왔을지를 생각하는 접근법을 배웠다.
- 점화식을 세우고, 필요하다면 초기화한다.
✅ 정답 확인
'Algorithm > Baekjoon' 카테고리의 다른 글
[이분탐색] 백준 #2805 나무 자르기 - Python (0) | 2024.05.03 |
---|---|
[DP] 백준 #9095 1, 2, 3 더하기 - Python (0) | 2024.04.09 |
[DP] 백준 #24416 알고리즘 수업 - 피보나치 수 1 - Python (0) | 2024.04.03 |
[완전탐색] 백준 #2529 부등호 - Python (1) | 2024.03.23 |
[스택] 백준 #3986 좋은 단어 - Python (0) | 2024.03.18 |