https://www.acmicpc.net/problem/15988
15988번: 1, 2, 3 더하기 3
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.
www.acmicpc.net
1 -> 1 (1개)
2 -> 1+1, 2 (2개)
3 -> 1+1+1, 1+2, 2+1, 3 (4개)
4 -> 1+3, 1+1+2, 2+2, 1+1+1+1, 1+2+1, 2+1+1, 3+1 으로, 1 2 3 숫자를 쓸 수 있으므로
n=3일때의 모든 경우에 +1을 한것, n=2일때의 모든 경우에 +2, n=3일때의 모든 경우에 +3을 한것의 합이 n=4의 모든 경우의 수이다.
그러므로 sum[i] = (sum[i-1] + sum[i-2] + sum[i-3])로 표현할 수 있다.
범위 초과 문제로 % 1000000009 를 해주었다.
코드
//15988
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, const char * argv[]) {
cin.tie(NULL);
ios::sync_with_stdio(0);
int n;
long long sum[1000001];
long long result;
cin >> n;
sum[1] = 1;
sum[2] = 2;
sum[3] = 4;
for(int t=0;t<n;t++) {
cin >> result;
for(int i=4;i<=result;i++){
sum[i] = (sum[i-1] + sum[i-2] + sum[i-3]) % 1000000009;
}
cout << (sum[result]) % 1000000009 << "\n";
}
return 0;
}
'코딩테스트 연습 > Baekjoon' 카테고리의 다른 글
[Baekjoon] 16194번: 카드 구매하기 2 / dynamic (0) | 2022.04.01 |
---|---|
[Baekjoon] 15990번: 1, 2, 3 더하기 5 / dynamic (0) | 2022.03.31 |
[Baekjoon] 1463번: 1로 만들기 / dynamic (0) | 2022.03.31 |
[Baekjoon] 14002번: 가장 긴 증가하는 부분 수열 4 / dynamic (0) | 2022.03.31 |
[Baekjoon] 1309번: 동물원 / dynamic (0) | 2022.03.31 |