boj)1107 - 리모컨
2020. 9. 22. 01:50ㆍPS/boj
import java.util.*;
public class boj_1107 {
static boolean[] broken = new boolean[10];
static int possible(int c) {
if (c == 0) {
if (broken[0]) {
return 0;
} else {
return 1;
}
}
int len = 0;
while (c > 0) {
if (broken[c % 10]) {
return 0;
}
len += 1;
c /= 10;
}
return len;
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
for (int i = 0; i < m; i++) {
int x = sc.nextInt();
broken[x] = true;
}
int ans = Math.abs(n - 100);
for (int i = 0; i <= 1000000; i++) {
int c = i;
int len = possible(c);
if (len > 0) {
int press = Math.abs(c - n);
if (ans > len + press) {
ans = len + press;
}
}
}
System.out.println(ans);
}
}
- 풀이에 근접한거 같은데 계속 런타임 오류에 걸리고 이유를 못찾겠음
- 똑같은 풀이인데 나는 BufferedReader와 StringTokenizer를 사용하고 이 풀이는 Scanner의 차이인데
입력에서 어떤 문제가 있는거 같다.
- 이동할 채널의 범위는 0~ 100만쯤 / 100만 이면 그렇게 큰 수가 아니기에 전부 돌아도 됨
- c의 각 자리를 뽑아 사용가능한 버튼으로 만든건지 체크
- 정상작동 버튼으로만 이루어진 수가 맞다면 길이 리턴
- press -> + 또는 - 버튼을 눌러야 하는 횟수
- len + press : c의 길이와 +,- 누르는 횟수
- 기존에 ans = n과 100의 차이의 절대값으로 주고 len + press와 비교
- ans가 더 작다면 그건 채널 이동 없이 +,- 버튼만으로 이동하는게 최솟값
- ans가 더 크다면 ans = len + press :: 채널 버튼 누른 후 +,- 이동하는게 최솟값
'PS > boj' 카테고리의 다른 글
boj)6064 - 카잉 달력 (0) | 2020.09.22 |
---|---|
boj)14500 - 테트로미노 (0) | 2020.09.22 |
boj)1476 - 날짜 계산 (0) | 2020.09.21 |
boj)3085 - 사탕 게임 (0) | 2020.09.21 |
boj)2309 - 일곱 난쟁이 (0) | 2020.09.21 |