728x90
반응형
https://www.acmicpc.net/problem/2193
두가지 방법으로 풀 수 있는 것 같다
다른 블로그들을 찾아보니 피보나치 수열로 많이 푼 것 같다
나는 다른 규칙을 찾아서
dp[n][s] : s로 끝나는 n자리 이친수 개수라고 정하고
dp[n][0] = dp[n-1][0] + dp[n-1][1]
dp[n][1] = dp[n-1][0]
라는 점화식을 가지고 코드를 짰다
#include <bits/stdc++.h>
using namespace std;
int n;
long long dp[91][2]={};
int main(void) {
cin >> n;
dp[1][0] = 0;
dp[1][1] = 1;
for(int i=2; i<=n; i++){
dp[i][0] = dp[i-1][0] + dp[i-1][1];
dp[i][1] = dp[i-1][0];
}
long long result = dp[n][0] + dp[n][1];
cout << result << endl;
return 0;
}
처음에는 dp배열과 result를 int형으로 잡고풀었더니 틀렸습니다가 나왔는데
피보나치 수열은 46항이 되면 int의 범위를 넘어간다고 한다
그래서 둘다 long long 형으로 바꿨더니 정답이 나왔다
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/DP/C++] 9465번 스티커 (0) | 2022.12.27 |
---|---|
[백준/DP/C++] 9461번 파도반 수열 (0) | 2022.12.26 |
[백준/DP/C++] 11057번 오르막 수 (0) | 2022.12.25 |
[백준/DP/C++] 1912번 연속합 (0) | 2022.12.25 |
[백준/DP/C++] 11054번 가장 긴 바이토닉 부분 수열 (0) | 2022.12.25 |