기록하는 공부
[백준 15552] 빠른 A+B (빠른 입출력/BufferReader, BufferredWriter 사용) 본문
Language/Java
[백준 15552] 빠른 A+B (빠른 입출력/BufferReader, BufferredWriter 사용)
SS_StudySteadily 2023. 3. 27. 21:25728x90
반응형
Java를 사용하고 있다면,
Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다.
BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.
문제
https://www.acmicpc.net/problem/15552
코드
import java.util.*;
import java.io.*;
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 N = Integer.parseInt(br.readLine());
//데이터 가공(StringTokenizer 사용)
StringTokenizer st;
for(int i=0; i<N; i++) {
st = new StringTokenizer(br.readLine(), " ");
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
bw.write(a+b+"\n");
}
br.close();
bw.flush();
bw.close();
}
}
BufferReader, BufferredWriter
- 버퍼를 사용하여 입출력을 하는 함수
- 버퍼를 사용하면 키보드의 입력을 받을 때마다 한 문자씩 버퍼로 저장되고 버퍼의 용량이 가득 차거나 개행 문자를 입력받으면 버퍼의 저장된 내용을 한 번에 프로그램에 전달한다.
- 키보드 입력받자마자 바로 프로그램에 전달하는 방식(버퍼를 사용하지 않는 방식) 보다 효율적이고 빠르다.
- 많은 양의 데이터를 처리할 때 유리
- Enter만을 경계로 인식하고 받은 데이터를 String으로 고정하기 때문에 데이터 가공이 따로 필요하다.
BufferReader, BufferredWriter 사용하기 위한 import
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
BufferReader
Scanner와 비슷한 역할을 한다.
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = br.readLine();
int i = Integer.parseInt(br.readLine());
선언은 맨 윗줄처럼하면 된다.
입력은 readLine();이라는 메서드를 사용한다.
이때, 주의해야할 사항 두 가지가 있다.
첫 번째로, String으로 리턴 값이 고정되어 다른 타입으로 입력을 받고 싶다면 반드시 형변환을 해야 한다.
두 번째로, 예외처리를 해야한다.
readLine()을 사용할 때마다 try - catch문을 사용하던가 throws IOException을 통해 처리한다.
데이터 가공
- StringTokenizer 사용
nextToken() 함수를 사용하면 입력받은 문자열을 공백단위로 구분해 순서대로 호출이 가능하다.
//위의 코드(선언)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //선언
String s = br.readLine();
int i = Integer.parseInt(br.readLine());
//데이터 가공(StringTokenizer 사용)
StringTokenizer st = new StringTokenizer(s); //StringTokenizer인자값에 입력 문자열 s 넣음
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
- . split() 사용
배열에 입력받은 문자열을 공백단위로 끊어 데이터를 저장하여 사용 가능하다.
String arr[] = s.split(" ");
BufferedWriter
System.out.println()과 비슷한 기능을 한다.
BufferedWriter에는 줄 바꿈 기능이 없기 때문에 newLine() 또는 \n을 통해 줄 바꿈을 해줘야 한다.
버퍼를 잡아놓기 때문에 flush()나 close()를 이용해 버퍼 사용 후 출력 스트림을 닫아야 한다.
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); // 선언
String s = "Hello"; // 출력할 문자열
bw.write(s); // 출력
bw.newLine(); // 줄바꿈
bw.write("\n"); // 줄바꿈
bw.flush(); // 남아있는 데이터를 모두 출력한다.
bw.close(); // 스트림 닫기
728x90
반응형
'Language > Java' 카테고리의 다른 글
[백준 5597] 배열 선언 (3가지 방법) (0) | 2023.03.27 |
---|---|
[백준 10951] EOF 처리하기 (Scanner 사용) (0) | 2023.03.27 |
[JAVA] 배열의 선언/생성/초기화/크기 (0) | 2023.03.27 |