문제 : https://www.acmicpc.net/problem/15990
[ 알고리즘풀이 ]
DP[0][N] : N을 같은 수를 두 번 이상 연속해서 사용안하고 끝이 1로 끝나는 경우.
DP[1][N] : N을 같은 수를 두 번 이상 연속해서 사용안하고 끝이 2로 끝나는 경우.
DP[2][N] : N을 같은 수를 두 번 이상 연속해서 사용안하고 끝이 3로 끝나는 경우.
→ DP[0][N] = DP[1][N - 1] + DP[2][N - 1];
→ DP[1][N] = DP[0][N - 2] + DP[2][N - 2];
→ DP[2][N] = DP[0][N - 3] + DP[1][N - 3];
#include<iostream>
#define M 1000000009
using namespace std;
int T, N, dp[3][100001] = {};
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
dp[0][1] = 1, dp[1][2] = 1, dp[0][3] = 1, dp[1][3] = 1, dp[2][3] = 1;
for (int i = 4; i <= 100000; i++) {
dp[0][i] = (dp[1][i - 1] + dp[2][i - 1]) % M;
dp[1][i] = (dp[0][i - 2] + dp[2][i - 2]) % M;
dp[2][i] = (dp[0][i - 3] + dp[1][i - 3]) % M;
}
cin >> T;
while (T--) {
cin >> N;
cout << ((dp[0][N] + dp[1][N])% M + dp[2][N])% M << '\n';
}
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 15992 : 1, 2, 3 더하기 7 - travelbeeee (0) | 2020.02.24 |
---|---|
[BOJ] 15991 : 1, 2, 3 더하기 6 - travelbeeee (0) | 2020.02.24 |
[BOJ] 15989 : 1, 2, 3 더하기 4 - travelbeeee (0) | 2020.02.24 |
[BOJ] 12100 : 2048(Easy) - travelbeeee (0) | 2020.02.24 |
[BOJ] 15993 : 1, 2, 3 더하기 8 - travelbeeee (0) | 2020.02.23 |