-
boj)1107 - 리모컨PS/boj 2020. 9. 22. 01:50
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