[백준] Baekjoon Online Judge
문제
45656이란 수를 보자.
이 수는 인접한 모든 자리의 차이가 1이다. 이런 수를 계단 수라고 한다.
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구해보자. 0으로 시작하는 수는 계단수가 아니다.
입력
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
출력
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
풀이
#include <iostream>
using namespace std;
#define MOD 1000000000
long long arr[101][10];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int N;
cin >> N;
for (int i = 1; i < 10; i++) arr[1][i] = 1;
for (int i = 2; i <= N; i++) {
for (int j = 0; j < 10; j++) {
if (j == 0)
arr[i][j] = arr[i - 1][j + 1] % MOD;
else if (j == 9)
arr[i][j] = arr[i - 1][j - 1] % MOD;
else
arr[i][j] = (arr[i - 1][j + 1] + arr[i - 1][j - 1]) % MOD;
}
}
long long result = 0;
for (int i = 0; i < 10; i++)
result += arr[N][i];
cout << result % MOD << '\n';
return 0;
}
for (int i = 2; i <= N; i++) {
for (int j = 0; j < 10; j++) {
if (j == 0)
arr[i][j] = arr[i - 1][j + 1] % MOD;
else if (j == 9)
arr[i][j] = arr[i - 1][j - 1] % MOD;
else
arr[i][j] = (arr[i - 1][j + 1] + arr[i - 1][j - 1]) % MOD;
}
}
이번에 들어갈 숫자 j가 0인 경우 그 앞에 있는 숫자가 1이어야 하며, j가 9인 경우 그 앞에 있는 숫자가 8이어야 한다. 그 외의 경우에는 j - 1과 j + 1인 경우 j가 그 뒤에 위치할 수 있다. 이를 활용하여 이번에 오는 숫자인 j에 따라 앞에서 구한 경우의 수 중 해당하는 것이 저장된 칸들의 합이 이번 칸에 들어가도록 하였다.
'백준 > C++' 카테고리의 다른 글
[Baekjoon/C++] 13913번 - 숨바꼭질 4 (0) | 2024.01.10 |
---|---|
[Baekjoon/C++] 2193번 - 이친수 (1) | 2024.01.09 |
[Baekjoon/C++] 16948번 - 데스 나이트 (0) | 2024.01.05 |
[Baekjoon/C++] 13549번 - 숨바꼭질 3 (1) | 2023.12.31 |
[Baekjoon/C++] 16928번 - 뱀과 사다리 게임 (0) | 2023.12.29 |