https://www.acmicpc.net/problem/1038
1038번: 감소하는 수
음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를
www.acmicpc.net
저번에 사용한 combinations를 사용했다.
0부터 9까지 숫자(형식은 문자)를 중복 없이 i개를 뽑으면 '9'-'0'순으로 정렬된 tuple이 생긴다. 그러면 tuple안의 요소를 순서대로 문자열 형태로 더한 후에 num_list에 넣을 때만 정수형으로 바꿔주면 된다. 그런데 이렇게 되면 순서가 뒤죽박죽이라 마지막에 sort를 한 번 해줘야 한다.
감소하는 수의 최대 개수는 미리 구할 수 있어서 N이 1023 이상이면 계산하지도 않고 -1을 출력하는 것이다.
from itertools import combinations
import sys
input = sys.stdin.readline
N = int(input())
num_list = []
def findDecreaseNum() :
for i in range(1, 11):
for combination in combinations(['9', '8', '7', '6', '5', '4', '3', '2', '1', '0'], i):
num_list.append(int(''.join(combination)))
num_list.sort()
if N >= 1023:
print(-1)
else:
findDecreaseNum()
print(num_list[N])
'알고리즘 > 백준' 카테고리의 다른 글
[백준 11725][파이썬] 트리의 부모 찾기 (0) | 2022.02.23 |
---|---|
[백준 1874][파이썬] 스택 수열 (0) | 2022.02.22 |
[백준 7568][파이썬] 덩치 (0) | 2022.02.18 |
[백준 1182][파이썬] 부분수열의 합 (0) | 2022.02.17 |
[백준 15654][파이썬] N과 M (5) (0) | 2022.02.16 |