본문 바로가기

알고리즘

백준 16435 BufferedReader와 Scanner

728x90

<원래 코드>

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String input = br.readLine();
        String input2 = br.readLine();

        int num = Integer.parseInt(input.split(" ")[0]);
        int length = Integer.parseInt(input.split(" ")[1]);
        String[] arr = input2.split(" ");

        Arrays.sort(arr);

        for(int i=0; i<num; i++){
            if(Integer.parseInt(arr[i])<=length){
                System.out.println(arr[i] + " "+ length);

                length++;
            }
        }

        return length;

주어진 테스트 케이스 2개에서는 정답인데 왜 틀리는 지 몰라서 답답했다 ㅠㅠ

다른 사람의 풀이를 검색해봤는데 딱히 다른게 입출력 부분 뿐이라서 고쳐봤더니 됐다.. 정말 이것 때문인가?

맨날 프로그래머스에서 풀어서 입출력 부분을 직접 작성할 일이 없었는데.. 상황에 따라 알맞게 써야겠다

 

<고친 코드>

        Scanner sc = new Scanner(System.in);

        int num = sc.nextInt();
        int length = sc.nextInt();
        int[] arr = new int[num];

        for (int i = 0; i < num; i++) {
            arr[i] = sc.nextInt();
        }


        Arrays.sort(arr);

        for (int i = 0; i < num; i++) {
            if (arr[i] <= length) {
                System.out.println(arr[i] + " "+ length);
                length++;
            }
        }

        return length;

 

1. Scanner의 버퍼 크기는 1024 chars, 반면 BufferReader의 버퍼 크기는 8192 chars이다.

2. BufferReader는 문자열을 단순히 읽고 저장, Scanner는 문자열을 구분하여 분석할 수 있다.

3. BufferReader는 동기화 된다. (멀티 쓰레드에 안전하다.) 반면 Scanner는 동기화가 되지 않는다.

4. BufferReader는 즉시 IOException 처리를 던지지만, Scanner는 숨긴다.

 

결론: Scanner가 더 편하지만 BufferReader의 속도가 더 빠르다.

 

알고리즘 문제를 풀 때는 BufferReader를 이용하는 것이 빠르니 더 좋은데.. 다시 코드를 고쳐봐야겠다

 

'알고리즘' 카테고리의 다른 글

배열 내림차순 정렬  (0) 2021.02.23
백준 11399 String[] -> Int[]  (0) 2021.02.18
탐욕(그리디) 알고리즘  (0) 2021.02.16
1로 만들기  (0) 2021.02.06
알고리즘27 LCA  (0) 2020.12.03