코딩테스트 파이썬/백준
감소하는 수 ( 1038 번 )
세용용용용
2025. 9. 1. 18:46
🧠 알고리즘
- 브루트포스 ( 조합 탐색 + 정 )
✔️ 동작 방식
- 사용할 숫자 집합을 ['9','8',...,'0']로 정의
- 길이가 1 ~ 10인 모든 조합을 생성 (combinations)
- 각 조합을 문자열로 합쳐 정수로 변환 → answer 리스트에 저장
- answer를 정렬해 증가하는 순서의 줄어드는 수 목록 완성
- n번째 값이 있으면 출력, 없으면 -1 반환
🧾 코드
import sys
from itertools import combinations
def _main():
answer = []
number = ['9', '8', '7', '6', '5', '4', '3', '2', '1', '0']
for com_num in range(1, 11):
for combi in combinations(number, com_num):
answer.append(int(''.join(combi)))
answer.sort()
if n >= len(answer):
return -1
else:
return answer[n]
n = int(sys.stdin.readline().rstrip())
print(_main())
⏱️ 시간 복잡도
각 조합은 갯수는 >> 2 ** 10 - 1 = 1023
해당 알고리즘 시간 복잡도 : 상수시간 ( O(1) )