화분

[Baekjoon]1107번 리모컨 풀이 본문

Study/CODINGTEST

[Baekjoon]1107번 리모컨 풀이

ExcellEast 2023. 12. 11. 01:04

1107번: 리모컨 (acmicpc.net)

 

1107번: 리모컨

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

www.acmicpc.net

 

 

import java.util.Scanner;
//import java.io.IOException;
//import java.io.BufferedReader;
//import java.io.InputStreamReader;

public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        int countBroken = sc.nextInt();
        boolean[] brokens = new boolean[10];
        for(int i = 0; i < countBroken; i++){
            brokens[sc.nextInt()] = true;
        }
        
        int minNum = Math.abs(count - 100);
        for(int i = 0; i <= 999999; i++){      
            String iterStr = String.valueOf(i);
            for(int j = 0; j < iterStr.length(); j++){
                if(brokens[iterStr.charAt(j) - '0']){
                    break;
                }
                if(j == iterStr.length() - 1){
                    minNum = Math.min(minNum, iterStr.length() + Math.abs(count - i));
                }
            }
        }
        System.out.println(minNum);
    }
}

 

 

코드를 작성하면서 많이 애먹은 부분은 nullPointer에러이다.

BufferedReader로 문자열을 입력 받았는데 아무것도 입력 받지 않을 경우 null 값이 생성되기 때문이다. 이 부분을 생각하지 못하여서 고민하다가 chatGPT와 다른 사람의 풀이를 보고 Scanner로 바꿨더니 정답을 맞췄다. 아마 BufferedReader를 사용한다면 null값인지 확인해줄 필요가 있다.

그리고 고장난 번호를 위와 같이 배열로 확인하는 것이 아닌 HashSet을 이용하여 풀었는데 이 부분 또한 문제가 됐다. 예를 들어 Set에 아무 값도 없는데 containsAll 메서드를 사용하면 문제가 되는거 같다. 그래서 그 부분 또한 배열로 바꿔 풀었다.