정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다.
수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이 같다. 하지만, 123과 432는 구성이 같지 않다.
첫째 줄에 X가 주어진다. (1 ≤ X ≤ 999999) X는 0으로 시작하지 않는다.
첫째 줄에 결과를 출력한다. 만약 그러한 숫자가 없는 경우에는 0을 출력한다.
import java.util.*;
import java.io.*;
public class Main {
static int N, num, min = Integer.MAX_VALUE;
static int[] arr, list;
static boolean[] visited;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String s = br.readLine();
num = Integer.parseInt(s);
N = s.split("").length; // 자릿수 개수.
arr = new int[N];
list = new int[N];
visited = new boolean[N];
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(s.split("")[i]);
}
BT(0);
System.out.println(min == Integer.MAX_VALUE ? 0 : min);
}
public static void BT(int depth) {
if (depth == N) {
String s = "";
for (int i: list) { // 배열 -> 문자열 -> 정수로 변환.
s += i;
}
int n = Integer.parseInt(s);
if (num < n) { // 입력값보다 큰 수중에 최솟값 찾기.
min = Math.min(min, n);
}
return;
}
for (int i = 0; i < N; i++) {
if (!visited[i]) {
visited[i] = true;
list[depth] = arr[i];
BT(depth + 1);
visited[i] = false;
}
}
}
}