문제

11057번: 오르막 수

풀이

그림 참고

예전에 동아리에서 만들었던 자료

예전에 동아리에서 만들었던 자료

구현

import sys
sys.setrecursionlimit(100000)  # 파이썬 내부적으로 재귀 함수 사용에 제한이 있어 런타임 오류가 발생하는것을 해결

N = int(input())

mem = [[0 for _ in range(10)] for _ in range(N + 1)]

def foo(n, x):
    if n == 0:
        return 0

    if mem[n][x] != 0:
        return mem[n][x]

    summ = 0
    for i in range(x, 10):
        summ += foo(n - 1, i) + 1
    mem[n][x] = summ
    return summ

print((foo(N, 1) + 1) % 10007)
#include <iostream>

using namespace std;

int mem[2000][10] = {0};

int foo(int n, int x) {
    if (n == 0) return 0;

    if (mem[n][x] != 0) return mem[n][x];

    int summ = 0;
    for (int i = x; i < 10; i++) {
        summ += foo(n - 1, i) + 1;
    }
    mem[n][x] = summ;
    return summ;
}

int main() {
    int N;
    cin >> N;
    
    cout << (foo(N, 1) + 1) % 10007;

    return 0;
}