[백준] 2992 크면서 작은 수.Java

조청유과·2023년 5월 26일
0

BOJ

목록 보기
49/128

문제

정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다.

수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이 같다. 하지만, 123과 432는 구성이 같지 않다.

입력

첫째 줄에 X가 주어진다. (1 ≤ X ≤ 999999) X는 0으로 시작하지 않는다.

출력

첫째 줄에 결과를 출력한다. 만약 그러한 숫자가 없는 경우에는 0을 출력한다.

Java

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;
            }
        }
    }

}

0개의 댓글

Powered by GraphCDN, the GraphQL CDN