반응형
문제
풀이
1. DP[i][j]라고 했을 때 i는 자릿수의 길이를 의미하고 j는 어떤 수의 끝 숫자를 말한다.
2. i자릿수의 숫자가 j로 끝난다고 하면 그 수의 개수는 i-1자릿수의 j-1로 끝나는 수와 j+1로 끝나는 수의 개수 합이 된다.
3. j가 0일 경우 j-1이 -1이 되서 의미가 없어지고 인덱스를 벗어난다. 즉 j가 0일 경우는 j+1만 해주면 된다.
4. j가 9일 경우 j+1이 10이 되서 의미가 없어지고 인덱스를 벗어난다. 즉 j가 9일 경우는 j-1만 해주면 된다.
코드
#include<iostream>
using namespace std;
int DP[101][101];
const int MOD = 1000000000;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
long result = 0;
for (int i = 1; i <= 9; i++) {
DP[1][i] = 1;
}
for (int i = 2; i <= N; i++) {
for (int j = 0; j <= 9; j++) {
if (j == 0) DP[i][j] = DP[i - 1][j + 1] % MOD;
// j가 0일 경우 j-1이 -1이 되서 의미가 없어지고 인덱스를 벗어난다.
else if (j == 9) DP[i][j] = DP[i - 1][j - 1] % MOD;
// j가 9일 경우 j+1이 10이 되서 의미가 없어지고 인덱스를 벗어난다.
else
DP[i][j] = (DP[i - 1][j - 1] + DP[i - 1][j + 1]) % MOD;
}
}
for (int i = 0; i <= 9; i++) result = (result + DP[N][i]) % MOD;
cout << result;
}
반응형
'Development > Algorithm' 카테고리의 다른 글
[SWEA] 1859. 백만 장자 프로젝트 (0) | 2020.09.23 |
---|---|
[BOJ] 11057. 오르막수 (0) | 2020.09.22 |
[BOJ] 9095. 1, 2, 3 더하기 (0) | 2020.09.20 |
[BOJ] 11727. 2 x n 타일링2 (0) | 2020.09.20 |
[BOJ] 11726. 2 x n 타일링 (0) | 2020.09.20 |