ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준/JAVA] 1107번 리모컨 - BruteForce
    ETC/Algorithm 2023. 6. 9. 09:38

    풀이

    고장난 버튼 저장 방식

    고장난 버튼을 미리 저장해둔다.
    나중에 입력된 버튼이 고장난 버튼인지 찾기 위해서 for문을 돌리는 순간, 시간초과 확정이다.
    이를 위해서 고장난 버튼을 boolean 형으로 저장한다.

    입력된 버튼 파싱 방법

    %10을 하면 입력된 버튼의 값이

    /10을 하면 다음 버튼의 값이 1의 자릿수로 설정되고 이를 %10하면 버튼의 값이 무엇인지 알 수 있다.

    원하는 채널 중에 가장 근삿값은?

    초기 채널은 100번이다. 앞으로 4000번을 틀기 위해서 10개의 버튼이 모두 고장나있는 경우 3900번을 눌러야 한다는 의미이다.

    여기서 3900번과

    내가 임의로 값을 지정해서 그 입력할 값에 이상이 있는지 없는지를 판단하고 위에서 3900번과 비교를 한다.

    이미 N-100을 진행했으므로, 0과 가장 가까운 값 Math.min을 통해 판별한다.

    코드

    제출 코드

    import java.io.*;
    import java.util.*;
    
    class Main {
    
        static int N, M;
        static boolean[] broken;
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            N = Integer.parseInt(br.readLine());
            M = Integer.parseInt(br.readLine());
            broken = new boolean[10];
    
            if (M != 0) {
                StringTokenizer st = new StringTokenizer(br.readLine(), " ");
                for (int i = 0; i < M; i++) {
                    broken[Integer.parseInt(st.nextToken())] = true;
                }
            }
    
    
            int result = Math.abs(N - 100);
            for (int i = 0; i < 1000000; i++) {
                if (check(i) != 0) {
                    result = Math.min(result, Math.abs(N - i) + check(i));
                }
            }
            bw.write(String.valueOf(result));
            bw.flush();
        }
    
        public static int check(int n) {
            if (n == 0) return broken[0] ? 0 : 1;
    
            int cnt = 0;
    
            while (n > 0) {
                if (broken[n % 10]) return 0;
    
                n /= 10;
                cnt++;
            }
            return cnt;
        }
    }

    댓글

Designed by black7375.