728x90
728x90
문제
45656이란 수를 보자.
이 수는 인접한 모든 자리수의 차이가 1이 난다. 이런 수를 계단 수라고 한다.
세준이는 수의 길이가 N인 계단 수가 몇 개 있는지 궁금해졌다.
N이 주어질 때, 길이가 N인 계단 수가 총 몇 개 있는지 구하는 프로그램을 작성하시오. (0으로 시작하는 수는 없다.)
입력
첫째 줄에 N이 주어진다. N은 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
출력
첫째 줄에 정답을 1,000,000,000으로 나눈 나머지를 출력한다.
#include <stdio.h>
#define mod 1000000000
int main(void){
int n,sum = 0 ,DP[101][10] = {0,};
scanf("%d", &n);
for (int i = 0; i < 10; i++)
{
DP[1][i] = 1;
}
for (int i = 2; i <= n; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 0)
DP[i][0] = DP[i - 1][1] % mod;
else if (j == 9)
DP[i][9] = DP[i - 1][8] % mod;
else
DP[i][j] = (DP[i - 1][j - 1] + DP[i - 1][j + 1]) % mod;
}
}
for (int i = 1; i < 10; i++)
{
sum = (sum + DP[n][i]) % mod;
}
printf("%d", sum % mod);
}
요번 문제는 다른 블로그에서 푸신 분의 코딩을 보고 참고하였습니다. 이 문제를 푸는데 4시간이 걸렸고, 3번이나 틀린 후에 겨우 맞았습니다...ㅠㅠ 분명히 제가 만든 경우의 수에서 다 돌아갔는데, 제출만 하면 틀리더라고요.. 이 허무함.
요번 DP문제는 규칙을 찾는게 정말 힘듭니다. N의 계단수 와 그 계단수에서 1~9가 나올 경우의 수를 이중 배열을 사용해서 규칙을 찾아야 겨우 풀 수가 있습니다.
-제목이 왜 쉬운 계단수인지 아직도 의문이네요;;
728x90
728x90
'Language > C' 카테고리의 다른 글
(C언어) 백준 2156번 : 포도주 시식 - 컴도리돌이 (0) | 2020.04.01 |
---|---|
(C언어) 백준 11057번 : 오르막 수 - 컴도리돌이 (0) | 2020.03.27 |
(C언어) 백준 9095번 : 1,2,3 더하기 - 컴도리돌이 (0) | 2020.03.23 |
(C언어) 백준 11727번 : 2 X n 타일링 2 - 컴도리돌이 (0) | 2020.03.20 |
(C언어) 백준 11726번 : 2×n 타일링 - 컴도리돌이 (0) | 2020.03.18 |