풀이코드
#include <iostream>
#include <cstdio>
using namespace std;
// 2193
int main(){
long long dp[91][2] ={0};
int length;
cin >> length;
dp[1][1] = 1;
for(int i = 2; i <= length; i++){
dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
dp[i][1] = dp[i - 1][0];
}
cout << dp[length][0] + dp[length][1] << endl;
}
해설
이전의 계단 수 문제들과 마찬가지로 n 번째와 n - 1 번째와의 관계를 파악하는 것이 중요했다. 끝 자리 수가 0 이려면 그 앞자리 수는 0이거나 1이여야 하고, 끝 자리수가 1 이려면 그 앞자리 수는 무조건 0 이여야 한다는 것이다.
한번에 맞추지 못하고 틀렸었는데 그것은 int 범위를 벗어난 답이 도출 되었기 때문이다. 그래서 dp 를 long long 자료형으로 바꾸어 문제를 해결했다.
반응형
'ps > 다이나믹 프로그래밍' 카테고리의 다른 글
2156 포도주 시식 (0) | 2021.07.16 |
---|---|
9465 스티커 (0) | 2021.07.14 |
11057 오르막수 (0) | 2021.07.11 |
10844 쉬운 계단 수 (0) | 2021.07.10 |
9095 (0) | 2021.07.10 |