Jun's Development Journey
[BOJ] 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 |