코딩/sparta TIL

TIL 9 : BufferedReader, BufferedWriter

americanoallday 2025. 2. 27. 18:08

Timeline

09:00 ~ 09:30 : 데일리 스크럼

09:30 ~ 12:00 : 백준 문제(1~2단계 완료)

12:00 ~ 13:00 : 점심 시간

13:00 ~ 14:00 : 개인 학습

14:00 ~ 15:00 : Java에서의 객체 활용

15:00 ~ 18:00 : 계산기 레벨1 진행, 백준 문제(3단계 완료)

18:00 ~ 19:00 : 저녁 시간

19:00 ~ 21:00 : 개인 학습

 

백준 1~3단계 문제 풀기 완료

1단계 : 입출력과 사칙연산

2단계 : 조건문

3단계 : 반복문

 

킹 받았던 문제 

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

내가 작성한 코드 계속 틀렸다고 하는데 이해가 안간다... 왜 안되는데~~

그냥 다른 사람이 작성한 코드로 통과시켜버림 ㅡㅡ;

 

내가 짜본 코드 ㅠ

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int count = scanner.nextInt();

        for(int i=0; i<count/4; i++){
            System.out.print("Long ");
        }
        System.out.println("int");
    }
}

 

 

백준 문제 https://www.acmicpc.net/problem/15552 풀려면 BufferedReader, BufferedWriter 알아야 한다고 한다 -_-;;

 

✅ BufferedReader & BufferedWriter 쉽게 이해하기 

 

BufferedReader와 BufferedWriter는 “입출력 속도를 빠르게 하기 위한” 클래스.

기본적인 Scanner나 System.out.println()보다 더 빠르게 동작.

더보기

BufferedReader와 BufferedWriter는 “버퍼(Buffer)“를 사용하여 데이터를 한 번에 읽고/쓰는 방식

반면, Scanner는 입력값을 한 글자씩 읽으면서 데이터 타입(int, double)을 자동 변환해야 해서 속도가 느림.

즉, BufferedReader는 한 번에 데이터를 많이 읽고, BufferedWriter는 한 번에 데이터를 많이 출력해서 속도가 빠름.

 

📌 성능 비교 테스트 (실제 실행 속도 차이)

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

public class Main {
    public static void main(String[] args) throws IOException {
        int N = 1000000; // 테스트 데이터 개수

        // ✅ Scanner 성능 테스트
        long start1 = System.currentTimeMillis();
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < N; i++) {
            int num = scanner.nextInt();
        }
        long end1 = System.currentTimeMillis();
        System.out.println("Scanner 실행 시간: " + (end1 - start1) + "ms");

        // ✅ BufferedReader 성능 테스트
        long start2 = System.currentTimeMillis();
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        for (int i = 0; i < N; i++) {
            int num = Integer.parseInt(br.readLine());
        }
        long end2 = System.currentTimeMillis();
        System.out.println("BufferedReader 실행 시간: " + (end2 - start2) + "ms");
    }
}
Scanner 실행 시간: 2000ms (2초)
BufferedReader 실행 시간: 300ms (0.3초)

특히 “많은 데이터를 입력/출력할 때” 효과적임.

BufferedReader와 BufferedWriter는 기본적으로 String 타입만 다룰 수 있음

즉, 숫자(int, double 등)를 입력받거나 출력하려면 String으로 변환 필요.

📌 BufferedReader로 숫자를 입력받으려면 Integer.parseInt() 같은 변환이 필요하고, BufferedWriter로 숫자를 출력하려면 String.valueOf()를 사용

 

1. BufferedReader란?

입력을 빠르게 받아들이는 기능!

Scanner보다 빠르게 한 줄(\n 기준)씩 읽을 수 있음.

readLine()을 사용하여 한 줄 전체를 가져옴!

 

🔹 BufferedReader 사용 예제

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

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

        System.out.println("입력하세요:");
        String input = br.readLine(); // ✅ 한 줄 입력 받기 (개행 포함)

        System.out.println("입력된 값: " + input);
    }
}

 

 

2. BufferedWriter란?

출력을 빠르게 하는 기능! (System.out.println()보다 속도가 빠름)

write() 메서드로 출력하고, flush()를 호출해야 실제 출력됨.

출력을 한 번에 처리하여 성능을 향상시킬 수 있음.

📌 BufferedWriter를 사용하면 버퍼에 출력값을 모았다가 한 번에 출력해서 속도를 높일 수 있음.

 

🔹 BufferedWriter 사용 예제

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;

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

        bw.write("Hello, BufferedWriter!"); // ✅ 버퍼에 저장
        bw.newLine(); // ✅ 줄 바꿈 추가
        bw.write("이렇게 출력 속도를 높일 수 있어!");

        bw.flush(); // ✅ 출력 강제 실행
        bw.close(); // ✅ 스트림 닫기
    }
}

 

 

3. BufferedReader + BufferedWriter 함께 사용하기

import java.io.*;

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

        System.out.println("이름을 입력하세요:");
        String name = br.readLine(); // ✅ 입력 받기

        bw.write("입력된 이름: " + name); // ✅ 출력 버퍼에 저장
        bw.newLine(); // ✅ 줄 바꿈 추가
        bw.flush(); // ✅ 출력 실행
        bw.close(); // ✅ 스트림 닫기
    }
}

📌 BufferedReader는 속도가 빠르고, 많은 데이터를 다룰 때 유리

📌 하지만 Scanner는 형 변환이 쉬워서 간단한 입력을 받을 때 더 편리