코딩테스트에서 입력 속도가 느려서 시간 초과를 겪은 적 있나요?
자바의 기본 입력 도구인 Scanner는 편리하지만 속도가 느려서 대량 입력에는 불리합니다.
이때 사용하는 것이 바로 BufferedReader입니다.
자바에서 문자 기반 입력을 버퍼링하여 효율적으로 읽어들이는 클래스
InputStreamReader와 함께 사용하여 System.in(표준 입력)을 읽음
코딩테스트에서는 빠른 입력 처리를 위해 사실상 필수
BufferedReader는 문자 입력 스트림을 버퍼링(buffering)해서 읽는 클래스입니다.
즉, 한 글자씩 읽는 대신 버퍼(임시 메모리 공간)를 이용해 대량으로 읽어와서 성능을 높여줍니다.
보통 InputStreamReader와 함께 사용하여 콘솔 입력(System.in)을 효율적으로 읽습니다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
| 메서드 | 설명 | 반환 타입 | 사용 예시 |
|---|---|---|---|
readLine() | 한 줄 전체 읽기 (개행 문자 제외) | String | String s = br.readLine(); |
read() | 한 글자 읽기 (없으면 -1 반환) | int | int c = br.read(); |
ready() | 읽을 문자가 준비되어 있는지 확인 | boolean | if (br.ready()) {...} |
skip(long n) | n개의 문자 건너뛰기 | long | br.skip(2); |
close() | 스트림 닫기 (자원 해제) | void | br.close(); |
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine(); // 한 줄 입력
System.out.println("입력값: " + input);
}
}
String[] numbers = br.readLine().split(" ");
int a = Integer.parseInt(numbers[0]);
int b = Integer.parseInt(numbers[1]);
System.out.println(a + b);
| 구분 | BufferedReader | Scanner |
|---|---|---|
| 속도 | 빠름 (버퍼 사용) | 상대적으로 느림 |
| 입력 단위 | 문자열(String) | 다양한 타입 지원 |
| 변환 | 직접 파싱 필요 (Integer.parseInt) | 자동 파싱 가능 (nextInt) |
| 코딩테스트 적합성 | ✅ 추천 | ❌ 입력 많으면 시간 초과 위험 |
BufferedReader = 빠른 입력 처리용 클래스
readLine()으로 문자열 입력 → 필요 시 split()과 Integer.parseInt()로 변환
flush()는 입력이 아니라 출력 스트림에서만 사용
코딩테스트에서는 Scanner 대신 BufferedReader + StringBuilder/BufferedWriter 조합이 정석