기록하는 공부

[백준 15552] 빠른 A+B (빠른 입출력/BufferReader, BufferredWriter 사용) 본문

Language/Java

[백준 15552] 빠른 A+B (빠른 입출력/BufferReader, BufferredWriter 사용)

SS_StudySteadily 2023. 3. 27. 21:25
728x90
반응형

Java를 사용하고 있다면,
Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter를 사용할 수 있다.
BufferedWriter.flush는 맨 마지막에 한 번만 하면 된다.

 

 

문제

 

 

https://www.acmicpc.net/problem/15552

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net

 

 

 

 


 

코드

 

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
반응형