공부 기록장

[백준 - Python] 1038. 감소하는 수 (완전 탐색) 본문

코딩 테스트/백준 문제 풀이

[백준 - Python] 1038. 감소하는 수 (완전 탐색)

빛나무 2024. 2. 16. 19:38

https://www.acmicpc.net/problem/1038

 

1038번: 감소하는 수

음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를

www.acmicpc.net

 

코드

import sys
from itertools import combinations
input = sys.stdin.readline

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

nums.sort()

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

 

감소하는 수가 되면서 가능한 최대 자리수는 0까지 포함해서 10자리 수이다

 

조합 함수인 combinations함수를 이용해서

0~9까지의 숫자들 중에서 특정 자리 수만큼 조합을 뽑아낸다

 

뽑아낸 경우들을 감소하는 수로 만들기 위해

리스트로 변환해준 후, 내림차순 정렬을 해주고

join 함수를 이용해서 숫자 형태로 만들어준 후에

감소하는 수들을 저장하는 변수인 nums 변수에 저장해준다

 

문제에서 N번째 감소하는 수를 구하라고 했음으로

nums를 오름차순 정렬해 준 뒤

인덱스 N으로 구하려는 답을 출력해준다.

 

이때 N번째 감소하는 수가 없으면 -1을 출력하게 하라 했음으로

try ~ except 문으로 처리해줬다.

 

 

참고 자료

https://ryu-e.tistory.com/59