과정
- 백트래킹을 사용해서 감소하는 수를 만든다.
- 수의 길이가 1인 경우는 따로 예외 처리를 했다.
- N 번째 감소하는 수가 나올 때까지 백트래킹을 시행하고, 값이 나오지 않는 경우는 -1을 출력한다.
- 자리마다 최소 1씩 감소해야하기 때문에 감소하는 수 중 제일 큰 수는 9876543210 이다. 이는 1022번째 수이며, 이 이상의 값이 N으로 들어오면 -1을 출력해야 한다.
N = int(input())
cnt = 9
def main(level, now):
if level == target_len:
global cnt
cnt += 1
if cnt == N: # 답이 들어오면 출력 후 종료
print(now)
exit()
return
for i in range(10):
if level == 0 or int(now[-1]) > i:
now = now + str(i)
main(level + 1, now)
now = now[:-1]
if N < 10: # 한 자리 수인 경우 예외처리
print(N)
exit()
i = 2
while True:
target_len = i
main(0, "")
i += 1
if cnt == 1022: # 값이 존재하지 않는 경우, -1 출력
print(-1)
break
- exit를 사용하지 않고 효율적으로 계산할 수 있다면 더 좋은 코드가 될 것 같다.