#문제
15990번: 1, 2, 3 더하기 5
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다.
www.acmicpc.net
#풀이 & 학습한 내용
중복이 안 되게 해야 하므로 마지막이 어떤 수인지에 대해 구분을 하여 경우의 수를 저장해주어야 한다. 2차원 배열을 선언하여 마지막에 더해지는 수 1, 2, 3에 대해 그 인덱스에 맞는 곳에 경우의 수를 저장한다. 인덱스를 0부터 해도 되지만 마침 마지막에 더해지는 수가 1 ,2, 3이므로 편하게 인덱스 또한 1,2,3일 때에 해당되도록 해서 헷갈리는 일이 없게 했다.
#소스코드
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include<iostream>
#include<algorithm>
using namespace std;
long long int dp[100002][4];
int main(void) {
dp[1][1] = 1; dp[1][2] = 0; dp[1][3] = 0;
dp[2][1] = 0; dp[2][2] = 1; dp[2][3] = 0;
dp[3][1] = 1; dp[3][2] = 1; dp[3][3] = 1;
for (int i = 4; i <= 100000; i++) {
dp[i][1] = (dp[i - 1][2] + dp[i - 1][3]) % 1000000009;
dp[i][2] = (dp[i - 2][1] + dp[i - 2][3]) % 1000000009;
dp[i][3] = (dp[i - 3][1] + dp[i - 3][2]) % 1000000009;
}
int T = 0;
int n = 0;
cin >> T;
while (T--) {
cin >> n;
cout << (dp[n][1] + dp[n][2] + dp[n][3]) % 1000000009 << '\n';
}
}
|
cs |
github.com/HoYoungChun/BOJ_algorithm/blob/master/Dynamic_Programming/BOJ_15990.cpp
HoYoungChun/BOJ_algorithm
Baekjoon Online Judge problem solving by C++. Contribute to HoYoungChun/BOJ_algorithm development by creating an account on GitHub.
github.com
'Algorithm > Dynamic Programming' 카테고리의 다른 글
| [C++] 백준 2193번 : 이친수 (S3) (0) | 2020.11.07 |
|---|---|
| [C++] 백준 10844번 : 쉬운 계단 수 (S1) (0) | 2020.11.07 |
| [C++] 백준 11052번 : 카드 구매하기 (S1) & 16194번 : 카드 구매하기 2 (S1) (0) | 2020.11.06 |
| [C++] 백준 15988번 : 1, 2, 3 더하기 3 (S2) (0) | 2020.11.05 |
| [C++] 백준 9095번 : 1, 2, 3 더하기 (S3) (0) | 2020.11.05 |