백준/브루트포스
[백준] 1107 - 리모컨 [JAVA]
odong2
2024. 5. 8. 16:38

코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
int target = Integer.parseInt(br.readLine()); // 목표 채널
int M = Integer.parseInt(br.readLine()); // 고장난 버튼 개수
boolean[] broken = new boolean[10]; // 해당 index true 면 사용 불가 버튼
if (0 < M) { // 고장난 개수가 0일 수 있음
st = new StringTokenizer(br.readLine());
}
for (int i = 0; i < M; i++) { // 고장난 배열 true 처리
int brokenNum = Integer.parseInt(st.nextToken());
broken[brokenNum] = true;
}
if (target == 100) { // 목표 채널이 100이면 현재 채널이므로 이동 필요하지 않음
System.out.println(0);
return;
}
int count = Math.abs(target - 100); // + 또는 - 로만 목표채널 이동한 횟수
for (int i = 0; i <= 999999; i++) {
String curNum = Integer.toString(i);
// i 번쨰 채널로 이동 바로 이동 가능한지 체크 변수
boolean isPossible = true;
for (int j = 0; j < curNum.length(); j++) {
if (broken[curNum.charAt(j) - '0']) { // 문자 숫자 변환
isPossible = false; // 고장난 버튼이면 break
break;
}
}
if (isPossible) {// 고장 안 났으면 target 까지 거리 계산해서 갱신
int cnt = curNum.length() + Math.abs(i - target); // i번 채널 이동후 +, - 이동
count = Math.min(count, cnt);
}
}
System.out.println(count);
}
}