728x90
https://www.acmicpc.net/problem/1038
1038번: 감소하는 수
음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를
www.acmicpc.net
해당 문제는 다이나믹 프로그래밍으로 문제를 해결 하였습니다. N 자리수의 값을 구할때 N-1 자리수에서 가져와 이어 붙힙니다.
예를들어서30,31,32 을 (두번째자리) 구한다고하면 3보다 작은 N-1 자리수에 3을 이어붙힌 값인 310, 320, 321 입니다.
[10]은 1로 시작하는 2번째 자리수, [20,21] 2로 시작하는 2번째 자리수 입니다.
dp[3] = prev_dp[2] + prev_dp[1] 이라는 점화식이 만들어집니다.
dp[n] = prev_dp[n-1] + ... + prev_dp[0] 이라는 점화식을 세울 수 있습니다.
N = int(input())
dp = [[] for _ in range(10)]
for i in range(10):
dp[i].append(i)
result = [0,1,2,3,4,5,6,7,8,9]
for i in range(1, 10): # 자리수 반복 ( 두번째 자리수 부터 시작)
temp_list = [[] for _ in range(10)]
for j in range(1, 10):
for k in range(j):
for num in dp[k]:
temp_list[j].append(int(str(j) + str(num)))
result.append(int(str(j) + str(num)))
dp = temp_list
if len(result) > N:
print(result[N])
else:
print(-1)
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 9019번 : DSLR (0) | 2023.08.18 |
---|---|
[백준] 15683번 : 감시 (0) | 2023.08.18 |
[백준] 17142번 : 연구소 3 (0) | 2023.08.16 |
[백준] 2589번 : 보물섬 (0) | 2023.08.10 |
[백준] 1068번 : 트리 (0) | 2023.08.08 |