boj)1107 - 리모컨

2020. 9. 22. 01:50PS/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