백준 11057. 오르막 수(python)

2023. 4. 23. 22:54카테고리 없음

 

11057번: 오르막 수

오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수

www.acmicpc.net


입력

  • 첫째 줄에 N(1 ≤ N ≤ 1000)이 주어진다.

문제 풀이

  • N자리 수 중 오르막수의 개수를 구해야한다.
  • N-1 자리 수의 각 끝자리 별 오르막 수의 개수를 알면 N 자리 수의 오르막 수의 개수를 알 수 있다.
N = int(input())
dp = [[0 for _ in range(10)] for _ in range(N+1)]
if N == 1:
    print(10)
  • N이 1이라면 오르막 수는 10개 이므로 10을 출력한다.
else:
    for i in range(10):
        dp[1][i] = 1
    for i in range(2, N+1):
        for j in range(1, 11):
            for k in range(j):
                dp[i][j-1] += dp[i-1][k]%10007
    sum = 0
    for i in range(10):
        sum += dp[N][i]%10007
    print(sum%10007)
  • N이 2 이상이면 자리수(행), 끝 자리(열, 0~9)를 나타내는 2차원 리스트를 만든다.
  • 1행은 모두 1로 초기화하고, 나머지는 0으로 초기화한다.
  • i자리 수 중 3으로 끝나는 수는 i-1자리 수 중 끝자리가 0, 1, 2, 3인 수로 만들 수 있다.
  • 위와 같은 방식으로 자리 수를 늘려간다.
  • 10007으로 나눈 나머지를 구해야하므로 중간과정에서 계속 나머지를 구해 더해준다.