Tesseractjh
한 걸음씩
Tesseractjh
전체 방문자
오늘
어제
  • 전체 (293)
    • IT (30)
      • JavaScript (7)
      • TypeScript (5)
      • React (5)
      • Next.js (3)
      • MongoDB (2)
      • Webpack (2)
      • HTML & CSS (1)
      • Git (0)
      • AWS (1)
      • 기타 (4)
    • 연습장 (259)
      • 백준(BOJ) 문제풀이 (185)
      • 프로그래머스 문제풀이 (61)
      • LeetCode 문제풀이 (2)
      • HackerRank 문제풀이 (7)
      • 낙서장 (3)
      • 기타 (1)
    • 프로젝트 (3)
      • 지뢰피하기 (1)
      • 키릴-라틴 문자 변환기 (1)
      • Flex & Grid (1)
    • 멋쟁이사자처럼 프론트엔드 스쿨 1기 (1)
      • 일기 & 회고록 (1)

인기 글

티스토리

hELLO · Designed By 정상우.
Tesseractjh

한 걸음씩

연습장/백준(BOJ) 문제풀이

[백준 11057] 오르막 수 with Python

2021. 9. 9. 12:48

문제 링크

https://www.acmicpc.net/problem/11057

 

11057번: 오르막 수

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

www.acmicpc.net

풀이

N = int(input())
dp = [[0]*10 for _ in range(N+1)]
dp[1] = [1]*10
for i in range(2, N+1):
    for j in range(10):
        dp[i][j] += sum([dp[i-1][k] for k in range(j+1)])

print(sum(dp[N])%10007)

dp[N]은 N자리 수 오르막 수들 중에서 0~9까지 각각의 숫자로 끝나는 경우의 개수를 해당 숫자의 인덱스에 저장한 배열이다.

dp[1]은 0부터 9까지 모든 숫자가 오르막 수 이므로 [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]이 된다.

 

N자리 오르막 수는 N-1자리 오르막 수 뒤에 N-1의 마지막 숫자와 같거나 큰 수를 붙여서 만들 수 있다.

예를 들어, N-1자리 오르막 수가 0으로 끝나면 N자리 오르막 수는 그 뒤에 0~9까지 아무 숫자나 붙여서 만들 수 있고,

N-1자리 오르막 수가 9로 끝나면 N자리 오르막 수는 그 뒤에 숫자 9만을 붙여서 만들 수 있다.

 

반대로 N자리 오르막 수가 0으로 끝나기 위해서는 N-1자리 오르막 수가 반드시 0으로 끝나야 하고,

N자리 오르막 수가 9로 끝나기 위해서는 N-1자리 오르막 수가 0~9까지 어떤 수로 끝나도 상관이 없다.

 

따라서, dp[N]은 아래와 같이 나타낼 수 있다.

dp[N] = [
    dp[N-1][0],
    dp[N-1][0] + dp[N-1][1],
    dp[N-1][0] + dp[N-1][1] + dp[N-1][2],
  
    ...

    dp[N-1][0] + dp[N-1][1] + ... + dp[N-1][9]
]

dp[N]의 모든 원소를 다 더 하면 N자리 오르막 수의 전체 개수가 된다.

저작자표시 비영리 (새창열림)

'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글

[백준 15663] N과 M (9) with Node.js  (0) 2021.09.12
[백준 2293] 동전 1 with Python  (0) 2021.09.10
[백준 9251] LCS with Python  (0) 2021.09.09
[백준 10844] 쉬운 계단 수 with Python  (0) 2021.09.08
[백준 16928] 뱀과 사다리 게임 with Node.js  (0) 2021.09.08
    '연습장/백준(BOJ) 문제풀이' 카테고리의 다른 글
    • [백준 15663] N과 M (9) with Node.js
    • [백준 2293] 동전 1 with Python
    • [백준 9251] LCS with Python
    • [백준 10844] 쉬운 계단 수 with Python
    Tesseractjh
    Tesseractjh
    바닐라 자바스크립트를 좋아하는 개발자입니다

    티스토리툴바