300x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- kick start
- 순열
- 알고리즘
- google coding competition
- 그래프
- PYTHON
- 코딩테스트
- 킥스타트
- CSS
- 네트워크
- 프로그래머스
- 동적 프로그래밍
- 리눅스
- BFS
- 코딩
- 동적프로그래밍
- dp
- 프로그래밍
- OS
- 백준
- 파이썬
- 운영체제
- 딥러닝
- AI
- 코딩 테스트
- linux
- 구글 킥스타트
- 브루트포스
- nlp
- DFS
Archives
- Today
- Total
오뚝이개발자
[백준11057] 오르막수 본문
728x90
300x250
문제
https://www.acmicpc.net/problem/11057
11057번: 오르막 수
오르막 수는 수의 자리가 오름차순을 이루는 수를 말한다. 이때, 인접한 수가 같아도 오름차순으로 친다. 예를 들어, 2234와 3678, 11119는 오르막 수이지만, 2232, 3676, 91111은 오르막 수가 아니다. 수의 길이 N이 주어졌을 때, 오르막 수의 개수를 구하는 프로그램을 작성하시오. 수는 0으로 시작할 수 있다.
www.acmicpc.net
생각의 흐름
예컨대, 세 자리 수를 구할 때 끝자리가 2라면 앞의 두자리에 올 수 있는 수는 2보다 작거나 같은 수들 뿐이다. 이러한 생각에 착안하여 앞자리는 두 자리 수 중 끝자리가 2인수+1인수+0인수임을 알 수 있다. 이것이 바로 동적프로그래밍을 적용하는데 있어 전단계와 다음 단계 간의 연결고리이다. 이와 같이 arr[i][j]에는 i자릿수 중 끝자리가 j인 경우의 수를 담는다. 그 후 해당 행의 값들을 모두 더해주면 해당 행만큼의 자릿수를 가진 수의 가짓수가 나온다.
코드
# 백준 11057
n = int(input())
arr = [[0]*10 for _ in range(1001)]
for i in range(10):
arr[1][i] = 1
for i in range(2, n+1):
for j in range(10):
for k in range(j+1):
arr[i][j] += arr[i-1][k]
print(sum(arr[n])%10007)
728x90
300x250
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준14002] 가장 긴 증가하는 부분수열 4 (0) | 2020.04.28 |
---|---|
[백준11055] 가장 큰 증가하는 부분수열 (0) | 2020.04.28 |
[백준9465] 스티커 (2) | 2020.04.23 |
[백준11727] 2 x n 타일링 2 (0) | 2020.04.21 |
[백준11722] 가장 긴 감소하는 수열 (0) | 2020.04.20 |