반응형
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 1,2,3 더하기 3 (15988)
[ 문제 ]
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
- 1+1+1+1
- 1+1+2
- 1+2+1
- 2+1+1
- 2+2
- 1+3
- 3+1
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 1,000,000보다 작거나 같다.
[ 출력 ]
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.
[ 코드 ]
#include<iostream>
using namespace std;
long long dp[1000001];
const long long mod = 1000000009LL;
long long DP(int n) {
if (n == 1)
{
return 1;
}
if (n == 2)
{
return 2;
}
if (n == 3)
{
return 4;
}
if (dp[n] > 0)
{
return dp[n];
}
dp[n] = (DP(n - 1) + DP(n - 2) + DP(n - 3)) % mod;
return dp[n];
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int T; // 테스트 케이스 개수
cin >> T;
while (T--)
{
int n; // 정수 n
cin >> n;
cout << DP(n)<< '\n';
}
return 0;
}
반응형
'문과 코린이의, [C. C++] 기록 > C++ 백준 문제풀이' 카테고리의 다른 글
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 동물원 (1309) (0) | 2021.07.24 |
---|---|
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - RGB 거리 (1149) (0) | 2021.07.23 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 합분해 (2225) (0) | 2021.07.22 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 제곱수의 합 (1699) (0) | 2021.07.22 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이[DP] - 연속합 (1912) (0) | 2021.07.22 |