문제링크 : https://www.acmicpc.net/problem/9711
9711번: 피보나치
첫 번째 라인에는 정수 T개의 테스트 케이스가 주어진다. 각 테스트 케이스는 정수 P와 Q가 주어진다.
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int T, P, Q;
ll dp[10001]; //합산시 int 범위 초과
int func(int p, int q)
{
dp[1]=1;
dp[2]=1;
for(int i=3; i<=p; i++)
{
dp[i] = dp[i-1]+dp[i-2]; //피보나치
dp[i] %= q;
}
return dp[p]%q;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> T;
for(int i=1; i<=T; i++)
{
cin >> P >> Q;
cout <<"Case #"<< i <<": "<< func(P, Q)<<"\n";
}
return 0;
}
간단한 피보나치 배열 규칙을 사용한 dp 문제이다.
수의 범위가 20억까지 올 수 있으므로 합산시에 int 범위를 초과하는 경우가 발생한다.
따라서 이를 위해 dp식을 long long으로 선언해준다.
'백준 > 실버' 카테고리의 다른 글
[백준 155991번] 1, 2, 3 더하기 6 (C++) (0) | 2024.02.10 |
---|---|
[백준 1343번] 폴리오미노 (C++) (0) | 2024.02.08 |
[백준 1402번] 아무도이문제는A번난이도인것같다 (C++) (0) | 2024.02.05 |
[백준 17390번] 이건 꼭 풀어야 해! (C++) (0) | 2024.02.03 |
[백준 19939번] 박 터뜨리기 (C++) (0) | 2024.02.01 |