- backtracking(int now, int depth)
1. 원소의 선택으로 현재까지 완성된 값을 가지고 있는 now 파라미터와
base condition을 위한 depth를 파라미터로 가지고 있다
2. 매 탐색마다 최우선으로 list에 now값을 가지고 있는지 파악하며, 없으면 list에 넣는다
- backtracking(10 x now + arr[depth], depth+1)
- backtracking(now, depth+1)
1. 선택하는 경우와 선택하지 않는 경우로 나눠서 재귀식을 돌려준다
2. 줄어드는 수로 만들기 위해 현재수를 왼쪽으로 밀도록 10을 곱해주고
arr[depth]의 원소 값을 더해준다
3. 선택하지 않는 경우는 그대로 now를 넘겨주며 depth는 진행을 위해 +1을 해준다
- if(depth == 10){return;}
1. depth가 10이면 배열의 인덱스 범위를 벗어나므로 종료해준다
(1회차 시도 성공)
import java.io.*;
import java.util.*;
public class Main {
static int[] arr = {9,8,7,6,5,4,3,2,1,0};
static List<Integer> list = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int k = Integer.parseInt(br.readLine());
backtracking(0,0);
Collections.sort(list);
if(list.size() < k){
bw.write("-1");
}else{
bw.write(list.get(k-1)+"");
}
br.close();
bw.close();
}
private static void backtracking(int now, int depth) {
if(!list.contains(now)){
list.add(now);
}
if(depth == 10){
return;
}
backtracking(10*now + arr[depth], depth+1);
backtracking(now, depth+1);
}
}
(2회차 시도 성공)
import java.io.*;
import java.util.*;
public class Main {
static int[] arr = {9,8,7,6,5,4,3,2,1,0};
static List<Integer> list = new ArrayList<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int k = Integer.parseInt(br.readLine());
backtracking(0,0);
Collections.sort(list);
if(list.size() < k){
bw.write("-1");
}else{
bw.write(list.get(k-1)+"");
}
br.close();
bw.close();
}
private static void backtracking(int now, int depth) {
if(!list.contains(now)){
list.add(now);
}
if(depth == 10){
return;
}
backtracking(10*now + arr[depth], depth+1);
backtracking(now, depth+1);
}
}