[백준] 2579번 - 계단 오르기
문제
문제 설명 및 풀이
DP 문제는 항상 점화식을 구하는 문제이다. N 번째 값을 구할 때 그전에 구한 값들을 이용해서 식으로 표현하는 것과 마찬가지이다. 위 문제의 조건은 다음과 같다.
- 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다.
- 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
- 마지막 도착 계단은 반드시 밟아야 한다.
I 번째 계단을 오르려면(항시 3번 조건 만족) 2칸 전에서 바로 오르거나, 3칸 전을 거쳐 바로 직전 칸을 거쳐 오는 방법 외에는 없다. 코드로 나타내면 아래와 같다.
정답 코드
#include <iostream>
#include <algorithm>
using namespace std;
int dp[301];
int stair[301];
int main()
{
int n;
cin >> n;
for(int i=1; i<=n; i++)
cin >> stair[i];
dp[1] = stair[1], dp[2] = stair[1] + stair[2];
for(int i=3; i<=n; i++)
dp[i] = max(dp[i-3] + stair[i-1], dp[i-2]) + stair[i];
cout << dp[n];
return 0;
}