Math.abs(N-100)
으로 설정해줘야 합니다.import java.util.*;
import java.io.*;
public class Main {
static List<Integer> numSet = new ArrayList<Integer>();
static int minVal = Integer.MAX_VALUE;
public static void main(String[] args) {
for (int i = 0; i <= 9; i++) {
numSet.add(i);
}
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
for (int i = 0; i < M; i++) {
numSet.remove(new Integer(sc.nextInt()));
}
minVal = Math.abs(N - 100); // 100에서 방향키로 움직이는 경우 // N==100일때, numSet.size()==0일때를 따로 분기할 필요 없이 이거면 OK
int[] answer = new int[11];
Arrays.fill(answer, -1);
Permu(0, new StringBuilder(), new boolean[11], Integer.toString(N).length(), N);
System.out.println(minVal);
}
public static void Permu(int depth, StringBuilder sb, boolean[] v, int size, int N) {
if (depth == size + 1) { // 99_999는 100_000에서 -1하는게 더 빠르다
int now = Integer.parseInt(sb.toString());
minVal = Math.min(sb.length() + Math.abs(now - N), minVal);
return;
}
if (!"".equals(sb.toString())) { // 100은 99에서 +1하는게 더 빠르다 (자릿수의 차이가 한자리 이상 날 수 있다(size-1로 하면 틀림))
int now = Integer.parseInt(sb.toString());
minVal = Math.min((depth) + Math.abs(now - N), minVal);
}
for (Integer next : numSet) {
sb.append(next);
Permu(depth + 1, sb, v, size, N);
sb.deleteCharAt(sb.length() - 1);
}
}
}