Jun's Development Journey

[BOJ] 2992번 크면서 작은 수 본문

BOJ/BruteForce

[BOJ] 2992번 크면서 작은 수

J_Jayce 2021. 4. 21. 12:38

문제

www.acmicpc.net/problem/2992

 

2992번: 크면서 작은 수

정수 X가 주어졌을 때, X와 구성이 같으면서 X보다 큰 수 중 가장 작은 수를 출력한다. 수의 구성이 같다는 말은, 수를 이루고 있는 각 자리수가 같다는 뜻이다. 예를 들어, 123과 321은 수의 구성이

www.acmicpc.net

풀이

- 풀이 중점 -

1) 주어진 숫자를 char 형 배열로 변형 및 순열을 사용하여 모든 경우의 수를 구했다.

2) 숫자의 길이를 알기 때문에 Math.pow() 함수를 이용하여 숫자를 생성했다.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.*;
import java.util.StringTokenizer;
import java.util.Map.*;

public class BOJ_2992 {
    static boolean chk;
    static int min=Integer.MAX_VALUE, original;
    static void swap(char[] arr,int idx1, int idx2) {
        char tmp = arr[idx1];
        arr[idx1] = arr[idx2];
        arr[idx2] = tmp;
    }
    static void permutation(char[] arr, int st, int len) {
        if(st == len-1) {
            int sum=0;
            for(int i=0;i<len;i++){
                sum+=Math.pow(10,(len-i-1))*(arr[i]-'0');
            }
            if(original<sum){
                if(min>sum){
                    min = sum;
                    chk = true;
                }
            }
            return;
        }
        for(int i=st;i<len;i++) {
            swap(arr,i,st);
            permutation(arr,st+1,len);
            swap(arr,i,st);
        }
    }
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;
        String X = br.readLine();
        char[] arr = X.toCharArray();
        original = Integer.parseInt(X);
        permutation(arr,0,arr.length);
        if(chk)
            System.out.println(min);
        else
            System.out.println(0);
    }
}

'BOJ > BruteForce' 카테고리의 다른 글

[BOJ] 1018번 체스판 다시 칠하기  (0) 2021.05.26
[BOJ] 1062번 가르침  (0) 2021.04.16
[BOJ] 15728번 에리-카드  (0) 2021.04.02
[BOJ] 2798번 블랙잭  (0) 2021.03.10
[BOJ] 1107 리모컨  (0) 2021.02.19