문제 링크

<aside> 💡 백트래킹/브루트포스 알고리즘

</aside>

Memory 114328KB Time 120ms Code Length 378B

import sys
from itertools import combinations

n = int(sys.stdin.readline())

nums = list()               
for i in range(1, 11):  
    for comb in combinations(range(0, 10), i):  
        comb = list(comb)
        comb.sort(reverse=True)                     
        nums.append(int("".join(map(str, comb))))

nums.sort()  

try:
    print(nums[n-1])
except:     
    print(-1)

이 코드는 0부터 9까지의 숫자를 사용하여 만들 수 있는 모든 조합을 생성하고, 그 중에서 n번째로 작은 수를 출력하는 코드이다.

먼저, itertools의 combinations를 사용하여 0부터 9까지의 숫자 중에서 i개를 선택하는 모든 조합을 생성한다. 이 때 i는 1부터 10까지 변한다.

각 조합은 오름차순으로 정렬되어 있으므로, 내림차순으로 정렬한 후에 숫자로 변환하여 nums 리스트에 추가한다.

모든 조합을 생성한 후에는 nums를 오름차순으로 정렬한다.

마지막으로, n번째 숫자를 출력한다. 만약 n번째 숫자가 없는 경우(즉, n이 생성된 조합의 개수보다 큰 경우)에는 -1을 출력한다.