JAVA) Scanner vs BufferReader

Daehwan Jung·2022년 10월 17일
0

JAVA

목록 보기
13/15

Scanner vs BufferReader 알아보기

codeup 문제를 풀다가 Scanner 사용해서 풀었더니 시간초과 나서 BufferReader를 알아보았다.

codeup 1084번

문제 설명

빨강(red), 초록(green), 파랑(blue) 빛을 섞어
여러 가지 빛의 색을 만들어 내려고 한다.

빨강(r), 초록(g), 파랑(b) 각각의 빛의 개수가 주어질 때,
(빛의 강약에 따라 0 ~ n-1 까지 n가지의 빛 색깔을 만들 수 있다.)

주어진 rgb 빛들을 다르게 섞어 만들 수 있는 모든 경우의 조합(r g b)과
총 가짓 수를 계산해보자.

입력

빨녹파(r, g, b) 각 빛의 강약에 따른 가짓수(0 ~ 128))가 공백을 사이에 두고 입력된다.
예를 들어, 3 3 3 은 각 색깔 빛에 대해서 그 강약에 따라 0~2까지 3가지의 색이 있음을 의미한다.

출력

만들 수 있는 rgb 색의 정보를 오름차순(계단을 올라가는 순, 12345... abcde..., 가나다라마...)으로
줄을 바꿔 모두 출력하고, 마지막에 그 개수를 출력한다.

Scanner 사용한 코드

import java.util.Scanner;

public class CodeUp1084 {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int c = sc.nextInt();
        int count=0;
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < b; j++) {
                for (int k = 0; k < c; k++) {
                    System.out.printf("%d %d %d\n",i,j,k);
                    count++;
                }
            }
        }
        System.out.printf("%d",count);
    }
}

결과

BufferReader 사용한 코드

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

public class CodeUp1084 {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        String[] strArr = str.split(" ");
        int a = Integer.parseInt(strArr[0]);
        int b = Integer.parseInt(strArr[1]);
        int c = Integer.parseInt(strArr[2]);

        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int count=0;
        for (int i = 0; i < a; i++) {
            for (int j = 0; j < b; j++) {
                for (int k = 0; k < c; k++) {
                    bw.write(i + " " + j + " " + k + "\n");
                    count++;
                }
            }
        }
        bw.write(String.valueOf(count));
        bw.flush();
    }
}

결과

메모리 차이가 나는 이유

BufferedReader를 사용할때와 Scanner의 속도가 차이가 나는 이유는 buffer 사용 여부

Scanner는 1KB 크기의 버퍼를 갖기 때문에 입력이 바로 전달되는 반면 BufferedReader는 8KB 크기의 버퍼를 가져 buffer에 입력들을 저장하였다 한 번에 전송하기 때문에 속도가 더 빠르다.

백준님이 작성하신 입력 속도 비교 글을 보면 평균적으로 BufferedReader 사용시에 0.6585, Scanner 사용시에 4.8448 초가 걸리는 차이가 있는데 적은 양의 데이터인 경우 문제가 없겠지만, 데이터 양이 많아질수록 성능 차이는 더 커진다.

0개의 댓글