[CS공부] BufferReader와 StringBuilder 그리고 BufferWriter

백엔드 취준생·2025년 6월 11일

CS공부

목록 보기
3/14
항목ScannerBufferedReader
속도느림 (상대적으로)빠름 (버퍼 사용)
사용 편의성간단하고 직관적다소 복잡 (IOException, 파싱 필요)
입력 단위토큰(단어) 단위 또는 줄 단위무조건 문자열 줄 단위
형 변환nextInt(), nextDouble() 등 자동 지원직접 Integer.parseInt() 등 사용해야 함
유형객체 기반 (파서 역할)문자 스트림 기반 (속도 최적화)

BufferedReader를 사용해야 하는 이유?

  • Scanner 내부적으로 정규표현식과 파싱 로직을 포함하여 느리다
    • 백준에서는 메모리 초과나 시간 초과 발생

그렇기 때문에 입력을 버퍼에 모아서 처리하므로, I/O 호출 횟수가 줄고 성능이 훨씬 좋습니다.

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

public class Main {
    public static void main(String[] args) throws IOException {
	    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            String line = br.readLine();  // 한 줄 입력
            sb.append("입력한 값: ").append(line).append("\n");
        }

		System.out.print(sb);
    }
}

StringBuilder를 함께 쓰는 이유

  • System.out.println()을 여러 번 쓰면 I/O 부하가 큼
  • StringBuilder로 문자열을 한 번에 모아서 출력하면 훨씬 빠름
  • 특히 알고리즘 문제에서 출력 속도까지 점수에 반영되는 경우 유리함
  • 큰 데이터의 경우 메모리 사용량이 많을 수 있다.

BufferedWriter

장점단점
출력 성능이 매우 뛰어남 (파일, 콘솔 모두 가능)IOException 처리 필요
파일 출력/표준 출력 모두 활용 가능flush() 안 하면 출력 안 될 수 있음
다양한 출력 옵션 (write(), newLine())문자열 가공은 어려움 (append()만 있음)
import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
	    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int n = Integer.parseInt(br.readLine());
        for (int i = 0; i < n; i++) {
            String line = br.readLine();  // 한 줄 입력
            sb.append("입력한 값: ").append(line).append("\n");
        }

        bw.write(sb.toString());  // 한번에 출력
        bw.flush();               // 꼭 flush() 해줘야 출력됨
        bw.close();
    }
}
profile
코딩하는 대학생

0개의 댓글