최대 1 분 소요

1. 문제

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

  • 백트래킹, DFS 문제
// 문제
음이 아닌 정수를 십진법으로 표기했을 , 
왼쪽에서부터 자리수가 감소할 , 
 수를 줄어드는 수라고 한다. 
예를 들어, 321 950 줄어드는 수이고, 322 958 아니다.

N번째로 작은 줄어드는 수를 출력하는 프로그램을 작성하시오. 
만약 그러한 수가 없을 때는 -1 출력한다. 
가장 작은 줄어드는 수가 1번째 작은 줄어드는 수이다.

// 입력
N이 주어진다. N은 1,000,000보다 작거나 같은 자연수이다.

// 출력
첫째 줄에 N번째 작은 줄어드는 수를 출력한다.

// 예제 입력 1 
1

// 예제 출력 1 
0

// 예제 입력 2 
19

// 예제 출력 2 
42

// 예제 입력 3 
500000

// 예제 출력 3 
-1


2. 핵심 아이디어

-


3. Python 문제풀이

import sys
input = sys.stdin.readline

arr = list()
result = set()

def dfs() :
  if len(arr) > 0 :
    result.add(int("".join(map(str, arr))))

  for i in range(0, 10) :
    if len(arr) == 0 or arr[-1] > i :
      arr.append(i)
      dfs()
      arr.pop()

n = int(input())

try :
  dfs()
  result = list(result)
  result.sort()
  print(result[n-1])
except :
  print(-1)


4. Java 문제풀이


댓글남기기