[백준java] for - 15552 / 빠른 A+B (BufferedReader, BufferedWriter)
2021. 10. 16. 15:24
우선 나는 BufferedReader와 BufferedWriter의 존재를 지금 처음 알았다..ㅎ
계속 Scanner과 System.out.println으로 해온 사람...
이 개념부터 먼저 정리해보기!
BufferedReader
= Scanner과 유사
BufferedWriter
= System.out.println(); 과 유사
- 둘은 scanner, System.out.println()보다 속도 측면에서 훨씬 빠르기 때문에 많은 양의 데이터를 처리할 때 유리하다.
→ 입력된 데이터가 바로 전달되지 않고 버퍼를 거쳐 전달되므로 데이터 처리 효율성을 높인다. - BufferedReader은 Enter만 경계로 인식하고 받은 데이터가 String으로 고정되기 때문에 입력 받은 데이터를 가공하는 작업이 필요한 경우가 많다.
BufferedReader 사용법
BufferedReader bf = new BufferedReader(net InputStreamReader(System.in)); //선언
String s = bf.readLine(); //String
int i = Integer.parseInt(bf.readLine()); //int
입력은 readLine();이라는 메서드를 사용하는데 여기서 주의할 점이 두가지 있다.
- readLine() 시 리턴값이 String으로 고정되기에 String이 아닌 다른 타입으로 입력 받으려면 형변환을 해줘야 한다.
- 예외처리를 꼭 해줘야 한다. readLine을 할 때마다 try&catch를 활용하여 예외처리를 해줘도 되지만 대부분 throws IOException을 통해 작업한다.
StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열을 넣는다.
int a = Integer.parseInt(st.nextToken()); //첫번째 호출
int b = Integer.parseInt(st.nextToken()); //두번째 호출
String array[] = s.split(" "); //공백마다 데이터 끊어서 배열에 넣음
Read한 데이터는 Line단위로만 나눠지기에 공백단위로 데이터를 가공하려면 따로 작업을 해줘야 하는데 위의 두가지 방법이 대표적이다.
- StringTokenizer에 nextToken() 함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있다.
- String.split() 함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용하는 방식이다.
BufferedWriter
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //할당된 버퍼에 값 넣어주기
String s = "abc"; //출력할 문자열
bw.write(s+"\n"); //버퍼에 있는 값 전부 출력
bw.flush(); //남아있는 데이터를 모두 출력시킴
bw.close(); //스트림을 닫음
- BufferedWriter의 경우 버퍼를 잡아놓았기 때문에 반드시 flush(), close()를 반드시 호출해줘 뒤처리를 해줘야 한다.
- bw.write에는 System.out.println();과 같이 자동개행기능이 없기 때문에 개행을 해줘야 할 경우에는 \n을 통해 따로 처리해줘야 한다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
// 빠른 A+B
public class Main {
public static void main(String[] args) throws IOException {
//Java를 사용하고 있다면, Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다.
//BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
StringTokenizer st;
for(int i=1; i<=T; i++) {
st = new StringTokenizer(br.readLine(), " ");
bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())) + "\n");
}
br.close();
bw.flush();
bw.close();
}
}
아직 익숙하지 않아서 자주 써봐야겠다.
'Algorithm Study > 백준 JAVA' 카테고리의 다른 글
[백준java] for - 2742 / 기찍 N (N거꾸로) (0) | 2021.10.16 |
---|---|
[백준java] for - 2741 / N 찍기 (0) | 2021.10.16 |
[백준java] for - 8393 / 합 (0) | 2021.10.15 |
[백준java] for - 10950 / A+B - 3 (0) | 2021.10.15 |
[백준java] for - 2739 / 구구단 (0) | 2021.10.15 |