백준 온라인 저지, 다이나믹프로그래밍 / 11057번: 오르막수 (파이썬 / , 백준 실버문제)
2021. 12. 11. 15:05ㆍ알고리즘/다이나믹프로그래밍
728x90
반응형
문제
오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다.
예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다.
수의 길이 N이 주어졌을 때, 오르막 수의 개수를 구하는 프로그램을 작성하시오. 수는 0으로 시작할 수 있다.
입력
첫째 줄에 N (1 ≤ N ≤ 1,000)이 주어진다.
출력
첫째 줄에 길이가 N인 오르막 수의 개수를 10,007로 나눈 나머지를 출력한다.
예제 입력 1
1
예제 출력 1
10
예제 입력 2
2
예제 출력 2
55
예제 입력 3
3
예제 출력 3
220
접근 방법
- 0. 이중 리스트를 만들어, 엘리먼트인 리스트의 인덱스를 해당 자릿수에서 가능한 숫자로 정의한다. ex) [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ...]
- 1. 리스트를 하나씩 탐색해가며 이전 자릿수에서 가능한 숫자의 경우의 수를 고려해 현재 자릿수에서 가능한 숫자의 경우의 수를 파악한다. ex) 이전 자릿수에서 0이 2개, 1이 3개면 현재 자릿수에서 0은 2개 가능, 1은 5개 가능, ....
- 2. 모든 리스트를 갱신한 뒤, n번째 리스트의 값을 모두 더하고, 이를 10007로 나눈 나머지를 출력한다.
코드
# https://www.acmicpc.net/problem/11057
# 접근 방법
# 0. 이중 리스트를 만들어, 엘리먼트인 리스트의 인덱스를 해당 자릿수에서 가능한 숫자로 정의한다. ex) [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], ...]
# 1. 리스트를 하나씩 탐색해가며 이전 자릿수에서 가능한 숫자의 경우의 수를 고려해 현재 자릿수에서 가능한 숫자의 경우의 수를 파악한다. ex) 이전 자릿수에서 0이 2개, 1이 3개면 현재 자릿수에서 0은 2개 가능, 1은 5개 가능, ....
# 2. 모든 리스트를 갱신한 뒤, n번째 리스트의 값을 모두 더하고, 이를 10007로 나눈 나머지를 출력한다.
n = int(input())
arr = [[0 for _ in range(10)] for _ in range(n+1)]
arr[1] = [1 for _ in range(10)]
for i in range(2, n+1):
for j in range(10):
for k in range(j, 10):
arr[i][k] += arr[i-1][j]
print(sum(arr[n]) % 10007)
728x90
반응형
'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글
백준 온라인 저지, 다이나믹프로그래밍 / 9461번: 파도반수열 (파이썬 / , 백준 실버문제) (0) | 2021.12.14 |
---|---|
백준 온라인 저지, 다이나믹프로그래밍 / 11660번: 구간합구하기5 (파이썬 / , 백준 실버문제) (0) | 2021.12.11 |
백준 온라인 저지, 다이나믹프로그래밍 / 1003번: 피보나치함수 (파이썬 / , 백준 실버문제) (0) | 2021.12.08 |
백준 온라인 저지, 다이나믹프로그래밍 / 2631번: 줄세우기 (파이썬 / , 백준 골드문제) (0) | 2021.12.04 |
백준 온라인 저지, 다이나믹프로그래밍 / 1932번: 정수삼각형 (파이썬 / , 백준 브론즈문제) (0) | 2021.12.04 |