링크 →
아영
package Baekjoon.java.silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class boj14629 {
static String Num,answer;
static Long minResult,targetNum;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
minResult = 9876543210L;
Num = br.readLine();
targetNum = Long.parseLong(Num);
if(targetNum>=minResult||Num.length()>10){
System.out.println("9876543210");
}else{
boolean[] numbers = new boolean[10];
int digit = Num.length();
dfs(numbers,0,"",digit);
if(digit!=1){
dfs(numbers,0,"",digit+1);
}
if(digit!=10){
dfs(numbers,0,"",digit-1);
}
System.out.println((answer);
}
}
private static void dfs(boolean[] numbers,int idx,String myNum,int Max){
if(idx==Max){
Long calNum = Long.parseLong(myNum);
Long result = Math.abs(calNum-targetNum);
if(minResult>result){
minResult = result;
answer = myNum;
}
return;
}
for (int i = 0; i <10; i++) {
if(!numbers[i]){
numbers[i] = true;
dfs(numbers,idx+1,myNum+Integer.toString(i),Max);
numbers[i] = false;
}
}
}
}
은영
package Baekjoon.java.silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class boj14629 {
static String Num,answer;
static Long minResult,targetNum;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
minResult = 9876543210L;
Num = br.readLine();
targetNum = Long.parseLong(Num);
if(targetNum>=minResult){
System.out.println("9876543210");
}else if(Num.length()<=10){
boolean[] numbers = new boolean[10];
int digit = Num.length();
dfs(numbers,0,"",digit);
if(digit!=1){
dfs(numbers,0,"",digit-1);
}
if(digit!=10){
dfs(numbers,0,"",digit+1);
}
System.out.println(Long.parseLong(answer));
}
}
private static void dfs(boolean[] numbers,int idx,String myNum,int Max){
if(idx==Max){
Long calNum = Long.parseLong(myNum);
Long result = Math.abs(calNum-targetNum);
if(minResult>result){
minResult = result;
answer = myNum;
}
return;
}
for (int i = 0; i <10; i++) {
if(!numbers[i]){
numbers[i] = true;
dfs(numbers,idx+1,myNum+Integer.toString(i),Max);
numbers[i] = false;
}
}
}
}
건
package day_0509;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class BOJ14629 {
static int n;
static long rAnswer, answer, input;
static List<Integer> isSelected;
static boolean[] isVisited;
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
input = s.nextLong();
if (input >= 10000000000l) {
System.out.println("9876543210");
} else {
long tInput = input;
while(tInput != 0) {
tInput /= 10;
n++;
}
isSelected = new ArrayList<>();
isVisited = new boolean[10];
answer = 1000000000000l;
permu(0, n);
if (n != 1) {
permu(0, n-1);
}
if (n != 10) {
permu(0, n+1);
}
System.out.println(rAnswer);
}
}
static void permu(int cnt, int max) {
if (cnt == max) {
long temp = 0;
long powTemp = 1;
for (int i = 0; i < max; i++) {
powTemp = 1;
for (int j = 0; j < max - i - 1; j++) {
powTemp *= 10;
}
temp += isSelected.get(i) * powTemp;
}
if (Math.abs(input - temp) < answer) {
answer = Math.abs(input - temp);
rAnswer = temp;
}
return;
}
for (int i = 0; i < 10; i++) {
if (!isVisited[i]) {
isSelected.add(i);
isVisited[i] = true;
permu(cnt+1, max);
isSelected.remove(isSelected.size()-1);
isVisited[i] = false;
}
}
}
}
용문
class BJ14629 {
private var target: Int64 = 0
private var isNumberSelected: [Bool] = .init(repeating: false, count: 10)
private var diff: Int64 = 0
private var answer: Int64 = 0
func solve() {
readComponents()
calc()
printAnswer()
}
private func readComponents() {
self.target = Int64( readLine()! )!
diff = target
}
private func calc() {
if target < 100 {
answer = target
return
} else if target < 1000 {
let startValue: Float = pow(10.0, Float(2)) * Float(target / 100)
isNumberSelected[Int(target / 100)] = true
permutation(value: startValue, count: 2)
} else if target < 10000 {
let startValue: Float = pow(10.0, Float(3)) * Float(target / 1000)
isNumberSelected[Int(target / 1000)] = true
permutation(value: startValue, count: 3)
} else if target < 100000 {
let startValue: Float = pow(10.0, Float(4)) * Float(target / 10000)
isNumberSelected[Int(target / 10000)] = true
permutation(value: startValue, count: 4)
} else if target < 1000000 {
let startValue: Float = pow(10.0, Float(5)) * Float(target / 100000)
isNumberSelected[Int(target / 100000)] = true
permutation(value: startValue, count: 5)
} else if target < 10000000 {
let startValue: Float = pow(10.0, Float(6)) * Float(target / 1000000)
isNumberSelected[Int(target / 1000000)] = true
permutation(value: startValue, count: 6)
} else if target < 100000000 {
let startValue: Float = pow(10.0, Float(7)) * Float(target / 10000000)
isNumberSelected[Int(target / 10000000)] = true
permutation(value: startValue, count: 7)
} else if target < 1000000000 {
let startValue: Float = pow(10.0, Float(8)) * Float(target / 100000000)
isNumberSelected[Int(target / 100000000)] = true
permutation(value: startValue, count: 8)
} else if target < 10000000000 {
let startValue: Float = pow(10.0, Float(9)) * Float(target / 1000000000)
isNumberSelected[Int(target / 1000000000)] = true
permutation(value: startValue, count: 9)
} else {
answer = 9876543210
}
}
private func permutation(value: Float, count: Int) {
print("value = \\(value)")
if count == 0 {
if diff > abs(target - Int64(value)) {
answer = Int64(value)
diff = abs(target - Int64(value))
} else if diff == abs(target - Int64(value)) {
answer = min(answer, Int64(value))
}
return
}
for index in isNumberSelected.indices.reversed() {
if isNumberSelected[index] { continue }
isNumberSelected[index] = true
print("count = \\(count), index = \\(index)")
print(isNumberSelected)
let temp: Float = pow(10.0, Float(count - 1)) * Float(index)
permutation(value: temp + value, count: count - 1)
isNumberSelected[index] = false
}
}
private func printAnswer() {
print(answer)
}
}
BJ14629().solve()