알고리즘/백준

[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])