✨ 문제
https://www.acmicpc.net/problem/15552
BufferedReader, BufferedWriter를 사용하여 입력값을 받아 출력하는 문제이다.
BufferedReader, BufferedWriter를 사용해본 적은 있지만 내가 아는건 Scanner보다 BufferedReader를 사용했을때 속도가 더 빠르다는 점 뿐이고 제대로 된 정의는 잘모르기 때문에 개념을 먼저 공부했다.
✨ BufferedReader와 BufferedWriter
BufferedReader는 Reader 클래스를 확장한 것으로 문자 입력 스트림을 버퍼를 사용하여 효율적으로 읽기 위한 클래스이다.
마찬가지로 BufferedWriter는 Writer 클래스를 확장한 것으로 문자 출력 스트림을 버퍼를 사용해 효율적으로 쓰기 위한 클래스이다.
✨ BufferedReader, BufferedWriter와 Scanner의 차이
자바에서 입출력을 처리하기 위한 방법에는 Scanner도 존재한다. 그렇다면 BufferedReader, BufferedWriter와 Scanner의 차이점은 무엇일까 ?
구분값
Scanner는 공백문자(스페이스, 탭, 엔터)등 여러 구분자를 기준으로 값을 인식하지만,
BufferedReader는 입력을 줄단위로 읽기 때문에 입력값이 공백을 포함하고 있어도 그대로 읽어온다.
전송 방식
Scanner는 키보드가 눌리는 즉시 입력값이 전송되는 반면,
BufferedReader는 키보드가 눌리면 버퍼에 값이 전송되고 버퍼가 가득 차거나 개행 문자가 입력된 경우에 버퍼의 내용을 한번에 전송한다.
그래서 버퍼를 사용해 데이터를 모아서 한번에 읽는 BufferedReader가 Scanner보다 효율적이고 속도가 빠르다.
입출력 데이터 타입
Scanner는 입력값에 따라 전달받은 데이터의 타입이 다르게 들어오지만,
BufferedReader는 항상 String타입으로 데이터를 받아오기 때문에 후처리가 필요하다.
상황에 따라 대량의 입출력값을 처리할 때는 BufferedReader, BufferedWriter를 사용하고,
다양한 형식의 데이터를 파싱하거나 다양한 소스로부터 입력을 받아야 하는 경우에는 Scanner를 사용하여
프로그램의 효율성과 가독성을 높일 수 있다.
✨ 코드
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));
int count = Integer.parseInt(br.readLine());
for (int i = 0; i < count; i++) {
String[] nums = br.readLine().split(" ");
bw.write(Integer.parseInt(nums[0]) + Integer.parseInt(nums[1]) + "\n");
}
bw.flush();
}
}
BufferedReader, BufferedWriter를 사용한 코드이다.
BufferedWriter는 자동 줄바꿈이 안되기 때문에 개행 문자를 붙여주었다.
그동안은 Scanner가 익숙해서 계속 사용했었는데 BufferedReader, BufferedWriter를 사용하니 확실히 채점 속도가 굉장히 빨랐다. 앞으로도 버퍼 입출력을 자주 사용해보고 익숙해져야겠다.
'알고리즘' 카테고리의 다른 글
Java에서 최소값 찾는 가장 효율적인 방법 : 직접 비교, Stream API, Collection.min() (2) | 2024.09.13 |
---|---|
[백준 10988] 팰린드롬인지 확인하기, StringBuilder.reverse() (4) | 2024.08.19 |
프로그래머스 181913 문자열 여러번 뒤집기 (25) | 2024.01.19 |
스택과 큐 (0) | 2023.08.24 |
구간 합 (0) | 2023.08.09 |