public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int T = sc.nextInt();
boolean[] remote = new boolean[10];
Arrays.fill(remote, true);
for (int i = 0; i < T; i++) {
int num = sc.nextInt();
remote[num] = false;
}
int min = Math.abs(N - 100);
for (int i = 0; i <= 999999; i++) {
char[] split = String.valueOf(i).toCharArray();
boolean flag =true;
for (char s : split) {
if (!remote[s-'0']) {
flag = false;
break;
}
}
if (flag) {
min = Math.min(min,Math.abs(i-N)+ split.length);
}
}
System.out.println(min);
}
}
👻remote에 고장난 번호는 false를 저장해준다 이후 완전탐색을 한다. for문을 돌려 최소값을 찾는데 이때 최대 길이를 999999로 해줘야 한다. (처음에는 500000으로 했다가 못 풀고 다른 분들의 풀이를 보고 알았다.)
먼저 최소값을 현재 번호인 100과 목표 번호인N의 차이의 절대값으로 저장한다.
😑이후 0부터 탐색을 시작하는데 현재 값인 i를 char배열로 가져와 고장난 번호를 가지고 있다면 다음 번호로 갈 수 있게 해준다.
만약 모든 번호가 고장나지 않았다면 현재 저장된 min값과 i부터 N으로 가는 값중 가장 작은 값을 저장한다. 이 때 split.length는 리모컨 누르는 횟수다. 이후 min값을 반환하면 답이 나온다.
🤔완전탐색이 생각보다 어려워서 시간이 많이 걸렸다. 더 많은 연습이 필요한 것을 느낀 문제였다.
출처: 백준 - 리모컨
참고블로그: 빈둥벤둥 IT logging