Don't give up!

[백준] 1107번 : 리모컨 (java) 본문

Coding Test/BOJ

[백준] 1107번 : 리모컨 (java)

Heang Lee 2021. 7. 16. 01:00

1107번: 리모컨 (acmicpc.net)

 

1107번: 리모컨

첫째 줄에 수빈이가 이동하려고 하는 채널 N (0 ≤ N ≤ 500,000)이 주어진다.  둘째 줄에는 고장난 버튼의 개수 M (0 ≤ M ≤ 10)이 주어진다. 고장난 버튼이 있는 경우에는 셋째 줄에는 고장난 버튼

www.acmicpc.net

어떻게 생각하고 문제를 풀었는가?

N을 만드는 최소 값을 구하기 위해서 모든 경우의 수를 조사하는 Brute Force 방식을 사용하고자 하였습니다.

각 케이스에 해당하는 숫자가 에러 버튼을 눌러야 하는 경우를 제외하고 남은 케이스 중 눌러야 하는 버튼의 숫자가 가장 작은 값을 반환한다면 정답을 얻을 수 있을 것이라 생각하였습니다.

 

코드

import java.io.*;
import java.util.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Solution sol = new Solution();
        int N = Integer.parseInt(br.readLine());
        int M = Integer.parseInt(br.readLine());
        boolean[] error = new boolean[10];
        if(M>0){
            StringTokenizer st = new StringTokenizer(br.readLine());
            for(int i=0; i<M; i++){
                error[Integer.parseInt(st.nextToken())] = true;
            }
        }
        System.out.println(sol.solution(N,error));
        br.close();
    }
}
class Solution{
    boolean[] error;
    public int solution(int N, boolean[] errArr){
        if(N==100) return 0;
        this.error = errArr;
        int answer = Math.abs(N-100);
        for(int i=0; i<1000001; i++){
            String str = String.valueOf(i);
            if(isValid(str)) answer = Math.min(Math.abs(N-i)+str.length(),answer);
        }
        return answer;
    }
    public boolean isValid(String str){
        for(int j=0; j<str.length(); j++){
            if(error[str.charAt(j)-'0'])   return false;
        }
        return true;
    }
}

Brute Force를 사용하여 정답을 찾는 코드입니다.

숫자 버튼은 0부터 9까지 존재하므로 크기가 10인 boolean 배열을 선언하여 어떤 숫자가 고장났는지 체크하고, 각 케이스의 문자열에 포함되지 않는다면 버튼의 수를 문자열의 길이 + |N-i|로 계산하여 최소 값을 저장합니다.

체널은 0부터 무한대만큼 존재하므로 N의 최대값인 500,000일때 0에서부터 1,000,000까지 경우의 수를 비교하여야 합니다.

'Coding Test > BOJ' 카테고리의 다른 글

[백준] 1013번: Contact (java)  (0) 2021.07.16
[백준] 1030번: 프렉탈 평면 (java)  (0) 2021.07.14
[백준] 2580번 : 스도쿠 (java)  (0) 2021.07.12