본문으로 바로가기

2193 이친수

category ps/다이나믹 프로그래밍 2021. 7. 11. 19:07

풀이코드

#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