알고리즘/백준
[Python] 1038번: 감소하는 수
띵지니
2023. 3. 18. 20:26
https://www.acmicpc.net/problem/1038
1038번: 감소하는 수
음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를
www.acmicpc.net
문제 설명
- 입력으로 N을 받으면 어떤 숫자가 N번째 감소하는 숫자인지 출력하면 되는 것
처음에는 무슨 말인지 몰라서 해맸는데 예제로 설명하자면
입력으로 18을 받았을 때 18번째 감소하는 숫자는 42이다
순서 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
숫자 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 20 | 21 | 30 | 31 | 32 | 40 | 41 | 42 |
이렇게 오름차순으로 정렬된 숫자 중에 N번째 감소하는 숫자를 출력하면 됩니다.
문제 풀이
- 조합을 사용하여 풀이
- itertools 라이브러리를 사용하여 손쉽게 조합을 사용 -> combinations(리스트, 만들어야하는 원소의 수)
코드
from itertools import combinations
N = int(input())
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
downList = []
for i in range(1, 11):
combi = list(combinations(nums, i))
for cb in combi:
cb = list(cb)
cb.sort(reverse=True)
downList.append(int("".join(map(str, cb))))
downList.sort()
if N >= len(downList):
print(-1)
else:
print(downList[N])