코딩하는 해맑은 거북이

[Python] 오르막 수 - 백준 (DP) 본문

코딩테스트

[Python] 오르막 수 - 백준 (DP)

#CJE 2023. 8. 10.
해당 글은 백준 11057번 문제 '오르막 수'을 다룬다.

문제

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

 

11057번: 오르막 수

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

www.acmicpc.net

 

설명

해당 문제는 DP로 간단하게 풀 수 있는 문제이다.

먼저 수는 0부터 시작할 수 있고, 인접한 수가 같아도 오름차순으로 친다는 조건이 있다.

한 자리의 수는 모든 값이 오르막 수 이므로 0~9까지의 1의 자리수를 의미하는 dp 배열을 [1]*10으로 초기화해준다.

두 자리의 수는 이전의 한 자리의 수의 dp 배열을 활용해서 현재 자리수까지의 합을 누적해주면 된다.

즉, [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] → [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] → [1, 3, 6, 10, 15, 21, 28, 36, 45, 55] .. 가 반복된다.

이때 dp 배열의 모든 값의 합이 갯수가 오르막 수의 갯수가 된다.

6개월 전에 풀었던 문제인데, 의외로 해당 코드를 열람한 사람이 꽤 있어서 기록해둔다..!

 

코드

n = int(input())
dp = [1]*10

for i in range(1, n):
    for j in range(1, 10):
        dp[j] += dp[j-1]
print(sum(dp)%10007)

     

 

 

'코딩테스트' 카테고리의 다른 글

[Python] 절댓값 힙 - 백준  (0) 2023.08.11
[Python] 베르트랑 공준 - 백준  (0) 2023.08.11
[Python] 기타줄 - 백준 (DP, 그리디)  (0) 2023.08.10
[Python] 최대 힙 - 백준  (0) 2023.06.16
[Python] 동물원 - 백준 (DP)  (0) 2023.06.05
Comments