1. ๋ฌธ์ ๋ถ์
๊ฐ์ํ๋ ์ ๋ฌธ์ ๋งํฌ
321, 952 ๋ฑ ์ ์ผ ํฐ ์๋ฆฟ์๋ถํฐ ์์ ์๋ฆฟ์๋ก ์ฌ์๋ก, ์๋ฆฟ์์ ๊ฐ์ด ์์์ง๋ ๊ฒฝ์ฐ, ๊ฐ์ํ๋ ์๋ผ๊ณ ํ๋ค. ๋ฐ๋ฉด 322, 235 ๋ฑ์ ์์ ์ ์์์ ๋ฒ์ด๋๊ธฐ์ ๊ฐ์ํ๋ ์๊ฐ ์๋๋ค.
0์ 0๋ฒ์งธ ๊ฐ์ํ๋ ์, 1์ 1๋ฒ์งธ ๊ฐ์ํ๋ ์, 9๋ฅผ 9๋ฒ์งธ ๊ฐ์ํ๋ ์ ๋ผ๊ณ ํ์ ๋,
์ฃผ์ด์ง N์ ๊ดํ์ฌ, N๋ฒ์งธ ๊ฐ์ํ๋ ์์ ๊ฐ์ ๊ตฌํ์ฌ๋ผ
2. ํธ๋ ์๋ฆฌ
์กฐํฉ์ด๋ค. ํ์ง๋ง ์๋์ ์กฐํฉ์ฒ๋ผ ์ค๋ฆ์ฐจ์์ผ๋ก๋ ํ ์ ์๋ค.
(1) ์ฒซ๋ฒ์งธ ์๋ฆฟ์๋ฅผ ๊ณ ์ ํ๊ณ , ๊ทธ ์๋ฆฟ์๋ฅผ limit์ผ๋ก ์ ํ๋ค.
(2) ์กฐํฉ์ ๋๋ฉฐ, ๋ ๋ฒ์งธ ์๋ฆฟ์๋ limit๋ณด๋ค ์์ ์ ์ค์์ ํ๋๋ฅผ ํํ๋ค.
(3) ์ฌ๊ท๋ฅผ ๋๋ค.
(4) ์ธ ๋ฒ์งธ ์๋ฆฟ์๋ฅผ ๊ณ ๋ฅผ ๋๋ ๋ ๋ฒ์งธ ์๋ฆฟ์๊ฐ ๋์ด์ค ์ ์๋ limit์ด๋ค.
(5-1) 3,4๋ฅผ ํ์ฌ ๊ตฌํด์ผํ๋ ์๋ฆฟ์ ๋งํผ ๋๋ค.
(5-2) ๊ธฐ์ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค. N๋ฒ์งธ ๊ฐ์ํ๋ ์์ ๋์ฐฉํ๋ฉด ํด๋น ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ง์ฝ 1022๋ฒ์งธ ์๋ฅผ ๋์ด์ ๋ค๋ฉด -1์ ์ถ๋ ฅํ๋ค.
3. ์ฝ๋ ๋ถ์
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/*
* ๊ฐ์ํ๋ ์ - ์กฐํฉ
* (1) ์กฐํฉ์ผ๋ก ๊ตฌํด์ผํ๋ ๊ฐ์ ์๋ฆฟ์ ์ ์
* (2) ํด๋น ์๋ฆฟ์์์ ์์ ์ซ์ ์ ์
* (3) ์์ ์ซ์์์ ์ญ์์ผ๋ก ๊ฐ ๊ตฌํ๊ธฐ
* */
public class Main {
static int N;
static StringBuilder sb = new StringBuilder();
static int [] arr = {0,1,2,3,4,5,6,7,8,9};
static int [] output;
static int cnt = 9;
static boolean isValid = false;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
// 1. ์์ธ ์ฒ๋ฆฌ
if(N >= 0 && N < 10){
System.out.println(N);
}
// 2. ์กฐํฉ์ผ๋ก ๊ฐ ๊ตฌํ๊ธฐ
for (int i = 2; i <= 10; i++) {
// ์๋ฆฟ์ ๊ตฌํ๊ธฐ
output = new int [i];
// ๋งจ ์์ ์ ๊ตฌํ๊ธฐ
for (int j = 1; j < 10; j++){
output[0] = j;
Combination(1,j);
if(isValid){
return;
}
}
}
// 3. ์ ํ ํ์ ๋ด์ ๋ชป ์ฐพ์์ผ๋ฉด ์๋ฌ
if(cnt < N){
System.out.println(-1);
}
}
// limit์ ์ด์ ๋ฐฐ์ด ๊ฐ์ผ๋ก ์ ํด์ ๊ทธ ์ด์์ ๋์ง ์๋๋ก ํ๋ค.
public static void Combination (int depth, int limit) {
// 1) ๊ธฐ์ ์กฐ๊ฑด
if(depth == output.length){
cnt++;
if(cnt == N){
isValid = true;
for (int temp : output){
System.out.print(temp);
}
}
return;
}
for (int i = 0; i < limit; i++) {
output[depth] = i;
Combination(depth+1, i);
}
}
}