© 2025 anveloper.dev
GitHub·LinkedIn·Contact

목차

  • 문제
  • 입력
  • 출력
  • 예제
  • 풀이
  • 코드
  • 복잡도
풀이 목록으로 돌아가기

BOJ 2688 - 줄어들지 않아

2025-07-15
BOJ
실버 I
python
원본 문제 보기
다이나믹 프로그래밍

문제

BOJ 2688 - 줄어들지 않아

N자리 수 중 줄어들지 않는 수(각 자리가 이전 자리 이상)의 개수를 구하라. 0으로 시작하는 수도 포함한다.

입력

테스트 케이스 수와 각 N이 주어진다.

출력

각 N에 대해 줄어들지 않는 N자리 수의 개수를 출력한다.

예제

입력출력
1 3220

풀이

DP로 각 자릿수에서 시작할 수 있는 경우의 수를 누적한다.

  1. dp[j] = 현재 자리에서 숫자 j로 시작하는 줄어들지 않는 수의 개수
  2. 처음에 모든 dp[j] = 1로 초기화한다
  3. 각 자리마다 dp[j] = sum(dp[j:])로 갱신한다 (j 이상인 수로 이어지는 경우)

핵심 아이디어: 각 자릿수에서 현재 숫자 이상인 다음 숫자만 선택할 수 있으므로, 접미사 합으로 경우의 수를 계산한다.

코드

for i in range(int(input())):
    n = int(input())
    dp = [1 for i in range(10)]
 
    for i in range(n-1):
        for j in range(10):
            dp[j] = sum(dp[j:])
    print(sum(dp))

복잡도

  • 시간: O(N²)
  • 공간: O(N)