1. 언제 쓰이나?
- Java 교재나 자주 접하는 레퍼런스 코드들을 살펴보면 출력과 입력은 보통 System.out.println을 활용하거나 Scanner를 불러와서 인스턴스를 새로 만들어 입력받는 경우가 대부분이다.
- 코딩테스트 문제를 자바로 풀다보면 시간제한 초과로 안되는 경우가 존재하는데, 이 경우 BufferReader와 BufferWriter를 활용하여 문제를 해결 가능하다.
- Buffer를 활용한 두 메서드의 경우 조작 방법이 다소 초기에 번거로운 측면이 있지만 속도 측면에서는 훨씬 빠르다.
2. 어떻게 쓰나?
import java.io.*;
import java.util.*;
public class Main{
public static void main (String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //읽는 라인
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //출력 라인
int x = Integer.parseInt(bf.readLine());
for (int i = 0; i < x; i++) {
String s = bf.readLine(); // String으로 라인별로 입력받
StringTokenizer st = new StringTokenizer(s);
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출
bw.write(String.valueOf(a+b));
bw.newLine();
}
bw.flush();
bw.close();
}
}
- 백준저지의 15552 문제에 대한 정답 코드이다. (문제링크)
- java.io의 메서드들을 모두 import한다.
- throws IOException을 추가해줘야 별도의 에러를 보지 않을 수 있다.
- 입력을 받기 위해서
- BufferReader를 새로운 변수에 인스턴스로 할당한다.
- BufferReader 내의 readLine() 메서드를 활용하여 입력을 받는다. 단, readLine()의 경우에는 기존의 nextInt와는 달리 라인별로 인식하며 String으로 결과값을 반환하기 때문에 정수형으로 캐스팅을 해주는 코드를 작성해주어야만 한다.
- 한 라인에 스페이스로 구분된 여러개의 정수값을 받고 싶을 때는, StringTokenizer를 활용하면 된다. 위 코드는 각 라인별로 두 개의 정수가 스페이스로 구분되어 입력될 때 별도로 구분하여 저장하는 코드이다.
- 출력을 하기 위해서
- BufferWriter를 통해 새로운 인스턴스를 생성한다.
- 생성된 BufferWriter를 통해 write 메서드를 사용하여 출력을 하게된다. println과는 달리 개행이 자동으로 이루어지지 않기 때문에 newLine()을 통해 개행을 해준다.
- write 메서드 내에 int값이 들어있는 변수를 넣어주면 제대로된 출력값이 나오지 않는다. String만을 제대로 인식하기 때문에 일어나는 현상인데 이 경우 연산이 완료된 정수값을 String으로 캐스팅하여 출력해준다.
- 끝으로 출력 버퍼를 깨끗하게 해주기 위해서 flush()와 close()를 실행하고 마무리한다.
3. 참고한 블로그
부족한 블로그에 방문해 주셔서 감사합니다.
잘못된 내용 수정 피드백은 댓글로 적어주세요.
감사합니다 :-)
반응형
'기초 튼튼 > 코테준비' 카테고리의 다른 글
[코테준비] BOJ에서 입출력에서 readline()과 input()의 EOF 입력시 차이점 (0) | 2020.12.15 |
---|---|
[코테준비] Python 해커랭크(HackerRank) 문제풀이 - 4 (2D Array) (1) | 2020.06.01 |
[코테준비] Python 해커랭크(HackerRank) 문제풀이 - 3 (Jumping on the Clouds) (0) | 2020.05.22 |
[코테준비] Python 해커랭크(HackerRank) 문제풀이 - 2 (Counting Valleys) (0) | 2020.05.21 |
[코테준비] Python 해커랭크(HackerRank) 문제풀이 - 1 (Socks Merchant) (0) | 2020.05.19 |