BOJ : https://www.acmicpc.net/problem/10844

GitHub : https://github.com/junho0956/Algorithm/blob/master/10844/10844/%EC%86%8C%EC%8A%A4.cpp

 

언제쯤 이런 문제를 쉽게 풀 수 있을까

설명은 코드에 적어놓았다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cstring>
using namespace std;
#define MOD 1000000000
int dp[10][101];
 
// start_num : 현재 숫자
// len : 확인해야할 남은 자릿수
int dfs(int start_num, int len) {
// 0 미만 9 초과의 범위는 계산하지 않는다.
    if (start_num < 0 || start_num > 9return 0;
 
// 이미 계산된 수는 더이상 계산할 필요 없으므로 그대로 가져다쓴다.
    if (dp[start_num][len] != -1return dp[start_num][len];
 
// 현재 dp 가 가져야 할 값은
// 현재 숫자에서 -1,+1 을 한 재귀형식을 더한 값이다.
    dp[start_num][len] = (dfs(start_num - 1, len - 1+ dfs(start_num + 1, len - 1)) % MOD;
    return dp[start_num][len];
}
 
int main() {
    ios::sync_with_stdio(false);
 
    int N, total = 0;
    cin >> N;
 
    memset(dp, -1sizeof(dp));
// 1자리수는 기본적으로 1가지밖에 없다.
    for (int i = 0; i <= 9; i++) dp[i][1= 1;
 
// 0부터 시작하면 안되므로 1부터 시작한다.
// 이때 시작의 의미는 첫번째 자리숫자를 의미.
    for (int i = 1; i <= 9; i++) {
        total += dfs(i, N);
        total %= MOD;
    }
    
    cout << total;
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter

 

복습 20.02.20 꽤 쉽게 풀었다.

'algorithm > BOJ' 카테고리의 다른 글

BOJ 11057번 오르막 수  (0) 2020.01.06
BOJ 2447번 별 찍기 - 10  (0) 2020.01.06
BOJ 3943번 헤일스톤 수열  (0) 2019.11.25
4673번 : 셀프넘버 - junnnho  (0) 2019.09.26
scpc 2019 예선 1차 2번 문제 : 공 굴리기 - Junnnho  (0) 2019.07.04

+ Recent posts