알고리즘/문제풀이
[Python] 백준 1038 감소하는 수
정찡이
2021. 9. 4. 15:29
728x90
1. 문제 링크
https://www.acmicpc.net/problem/1038
1038번: 감소하는 수
음이 아닌 정수 X의 자릿수가 가장 큰 자릿수부터 작은 자릿수까지 감소한다면, 그 수를 감소하는 수라고 한다. 예를 들어, 321과 950은 감소하는 수지만, 322와 958은 아니다. N번째 감소하는 수를
www.acmicpc.net
2. 문제 요약
n번째 감소하는 수를 찾는 문제이다. 9876543210 이후로 감소하는 수는 없기 때문에 그 이후 수는 -1을 출력한다.

3. 아이디어 정리
- 0~9로 1개~10개까지 모든 조합을 구한다.
- 오름차순을 하여 정렬을 진행한다.
- 해당 수를 출력하거나 인덱스 에러가 나면 해당 순서 감소하는 수가 없는 것이라 -1 출력한다.
4. 문제 풀이
4-1. 내 풀이
import sys
from itertools import combinations
n = int(sys.stdin.readline())
nums = list() # 모든 감소하는 수
for i in range(1, 11): # 1~10개의 조합 만들기 (0~9개니깐)
for comb in combinations(range(0, 10), i): # 0~9로 하나씩 조합 만들기
comb = list(comb)
comb.sort(reverse=True) # 해당 조합을 감소하는 수로 변경
nums.append(int("".join(map(str, comb))))
nums.sort() # 오름차순
try:
print(nums[n])
except: # 인덱스가 넘어가는 경우 -1 출력. 마지막 수 9876543210
print(-1)
5. 결론
- 조합을 이용한 문제
반응형