자바 코딩테스트 입력 도구 BufferedReader란 무엇인가?

최승혁·2025년 9월 4일
post-thumbnail

📌 개요

코딩테스트에서 입력 속도가 느려서 시간 초과를 겪은 적 있나요?
자바의 기본 입력 도구인 Scanner는 편리하지만 속도가 느려서 대량 입력에는 불리합니다.
이때 사용하는 것이 바로 BufferedReader입니다.


🔍 BufferedReader란?

  • 자바에서 문자 기반 입력을 버퍼링하여 효율적으로 읽어들이는 클래스

  • InputStreamReader와 함께 사용하여 System.in(표준 입력)을 읽음

  • 코딩테스트에서는 빠른 입력 처리를 위해 사실상 필수

    BufferedReader는 문자 입력 스트림을 버퍼링(buffering)해서 읽는 클래스입니다.
    즉, 한 글자씩 읽는 대신 버퍼(임시 메모리 공간)를 이용해 대량으로 읽어와서 성능을 높여줍니다.
    보통 InputStreamReader와 함께 사용하여 콘솔 입력(System.in)을 효율적으로 읽습니다.


🛠️ 기본 구조

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

🧩 주요 메서드

메서드설명반환 타입사용 예시
readLine()한 줄 전체 읽기 (개행 문자 제외)StringString s = br.readLine();
read()한 글자 읽기 (없으면 -1 반환)intint c = br.read();
ready()읽을 문자가 준비되어 있는지 확인booleanif (br.ready()) {...}
skip(long n)n개의 문자 건너뛰기longbr.skip(2);
close()스트림 닫기 (자원 해제)voidbr.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 vs Scanner

구분BufferedReaderScanner
속도빠름 (버퍼 사용)상대적으로 느림
입력 단위문자열(String)다양한 타입 지원
변환직접 파싱 필요 (Integer.parseInt)자동 파싱 가능 (nextInt)
코딩테스트 적합성✅ 추천❌ 입력 많으면 시간 초과 위험

🚀 정리

  • BufferedReader = 빠른 입력 처리용 클래스

  • readLine()으로 문자열 입력 → 필요 시 split()과 Integer.parseInt()로 변환

  • flush()는 입력이 아니라 출력 스트림에서만 사용

  • 코딩테스트에서는 Scanner 대신 BufferedReader + StringBuilder/BufferedWriter 조합이 정석

profile
Full-Stack Developer

0개의 댓글