본문 바로가기
알고리즘 & 자료구조/백준

백준 15552

by 신재권 2021. 6. 29.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;


public class Main15552 {

	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 T = Integer.parseInt(bf.readLine());
		StringTokenizer st;
		
		for(int i=0; i<T; i++){
			st = new StringTokenizer(bf.readLine());
			bw.write((Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken()))+"\n");
		}
		
		bw.close();

	}

}

lㅏㅜㅁ  BufferedReader/BufferedWriter은 Buffer에 있는 IO 클래스이다. 기존의 Scanner입력 방식은 입력 데이터가 바로 전달되는데, 위 클래스는 입력한 데이터가 바로 전달되지 않고 중간에 버퍼링이 된 후에 전달된다. 

즉 짐을 옮길때 수레를 통해 옮겨 효율성을 높이는 것이다.

출력도 마찬가지로 버퍼를 거쳐 출력장치로 전달되기에 효율성을 높여주고 InputStreamReader/OutputStreamWrite를 사용하여 버퍼링을 하게되면 입출력 스트림으로부터 미리 버퍼에 데이터를 갖다 놓기 때문에 효율성이 올라간다.

 

Scanner은 Space와 Enter를 입력의 경계로 인식해 데이터를 가공하기 편리하다. 

하지만 BufferReader은 Enter만 경계로 인식하고 받은 데이터가 String으로 입력되기 때문에 직접 데이터를 가공해야 한다.  하지만 많은 양의 데이터를 입력받을 경우에는 BufferReader를 통해 입력받는게 효율성이 좋고, 버퍼를 활용해 작업속도가 차이가 난다.

 

BufferedReader 사용법

BufferedReader bf =new BufferedReader(new InputSteamReader(System.in));
String s = bf.readLine();  //데이터를 입력 받는다.
// 문자열로만 입력되기 때문에 정수형 등 다른 타입을 사용하기 위해서는 직접 가공을 해야한다.
int i = Integer.parseInt(bf.readLine()); //Int형

주의점은 readLine()의 리턴값은 String이기때문에 다른타입을 사용하기 위해서는 직접 형변환을 해주어야하고, 예외처리를 꼭 해주어야 한다. throws IOException을 class옆에 붙이거나 try&catch문을 사용해 예외처리를 해준다.

 

Read한 데이터는 Line단위로 나눠지기 때문에 공백단위로 데이터를 저장하기 위해 따로 작업을 해줘야 한다.

첫번째 방법으로는 StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백 단위로 구분하여 호출이 가능하고 , 두번째 방법은 String.split()함수를 활용해 공백단위로 끊어서 데이터를 배열에 넣어 사용하는 방식이다.

StringTokenizer st = new StringTokenizer(s); 
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());

String array[] = s.split(" "); 

 

BufferedWriter 사용법

기본적으로 출력하는 방법은 System.out.println() 방식을 사용하는데, 많은 데이터의 출력에서는 Buffer를 활용하면 효율성이  올라간다.

BufferWriter는 버퍼를 사용하기 때문에 flush() 및 close()를 호출해야 한다.

또한 bw.write는 자동개행(줄바꿈)이 없기 떄문에 직접 \n으로 처리를 해줘야 한다.

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)):
String s = "123456"
bw.write(s); //출력
bw.newLine(); //줄바꿈
bw.flush(); //남아있는 데이터 모두 출력
bw.close(); //스트림을 닫음

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 2739  (0) 2021.06.29
백준 2588  (0) 2021.06.29
백준 14681  (0) 2021.06.28
백준 1330  (0) 2021.06.28
백준 10998  (0) 2021.06.28