카테고리 없음
[C++] BOJ 2193번: 이친수
코딩 제이티
2020. 11. 26. 11:06
문제 풀이
이 문제를 풀 때에 애를 많이 먹었다. 결론부터 말하면 풀이가 문제가 아니라 타입이 문제였다. int형이 아닌 long long형을 써야 문제가 풀릴 거라 생각을 못했는데, 아마도 계산한 값이 엄청 큰 값이 나오는 모양이다.
또 질문 게시판을 보며 알게 되었는데 피보나치 수열 문제이기 때문에 피보나치 문제를 풀 때에 사용한 풀이로 풀 수도 있다고 한다.
코드
#include <bits/stdc++.h>
using namespace std;
int N;
long long calculated[93][2];
void calculate(int num)
{
if (num > N)
return;
if (num == 1)
{
calculated[1][0] = 0;
calculated[1][1] = 1;
}
else
{
calculated[num][1] = calculated[num - 1][0];
calculated[num][0] = calculated[num - 1][0] + calculated[num - 1][1];
}
calculate(num + 1);
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> N;
calculate(1);
long long result = calculated[N][0] + calculated[N][1];
cout << result << '\n';
return 0;
}