Scanner vs BufferedReader 입력 처리방식에 따른 성능 차이

tree·2025년 1월 14일
0

코테

목록 보기
1/1

기본 개념

Scanner

  • Scanner는 간단하고 직관적인 입력 처리 방식

  • 버퍼를 사용하지 않는 입력, 키를 누르는 즉시 프로그램에 전달됨

  • 데이터를 읽고 형 변환(파싱)까지 한 번에 수행

  • 예를 들어, 정수나 문자열 입력을 받을 때 편리함

BufferedReader

  • BufferedReader는 데이터를 라인 단위로 읽어 메모리에 저장

  • 버퍼를 사용하는 입력, 입력이 있을 때마다 한 문자씩 버퍼로 전송됨

  • 파싱이나 형 변환은 직접 수행해야 함

  • 데이터가 크거나 I/O 성능이 중요한 경우 적합함

차이점: Buffer

BufferedReader, BufferedWriter은 버퍼를 사용하여 일기, 쓰기를 하는 함수이다.
즉, BufferedReader는 버퍼를 사용해서 읽고 Scanner는 버퍼를 사용하지 않고 바로 읽는다.

입력 처리 예제

Scanner

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            int num = sc.nextInt();
            System.out.println(num);
        }
    }
}

BufferedReader

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine());
        while (st.hasMoreTokens()) {
            int num = Integer.parseInt(st.nextToken());
            System.out.println(num);
        }
    }
}

같이 보면 좋을 코테 문제

https://www.acmicpc.net/problem/10158

해당 문제에서 입력값에 대한 제한이 다음과 같다.

문제에서 w와 h는 자연수이며 범위는 2 ≤ w,h ≤ 40,000이다. 그리고 개미의 초기 위치 p와 q도 자연수이며 범위는 각각 0 < p < w과 0 < q < h이다. 그리고 계산할 시간 t의 범위는 1 ≤ t ≤ 200,000,000이다. 

이때 Scanner를 쓰면 시간초과가 나고 BufferedReader를 쓰면 같은 로직을 쓸 때 통과가 된다.

0개의 댓글