백준/JAVA

[백준/JAVA] 15552번 빠른 A+B

누룽지맛치킨 2023. 1. 16. 15:46
  • BufferedReader, BufferedWriter을 이용한 빠른 입출력

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

1. 문제 접근

  • 하나의 입력을 받는다.
  • 입력된 수만큼 반복해서 2개의 수를 입력받고 두 수의 합을 출력한다.

-> 기존에 사용하던 Scanner와 System.out.println 대신 BufferedReader와 BufferedWriter 사용!

Scanner와 BufferedReader의 차이점!

  • Scanner은 java.util 패키지 클래스로 간단한 입력을 받을 때 유용! 또한 Scanner은 공백과 개행 모두를 경계로 나누어 입력을 받는다.
  • BufferedReader은 java.io 패키지 클래스로 입력 데이터를 바로 처리하지 않고 버퍼링을 하고 한번에 데이터를 전달하기 때문에 많은 양의 데이터를 효율적으로 입력받을 수 있다. 또한 개행만 경계로 인식한다. Scanner는 원하는 자료형으로 입력을 받을 수 있지만 BufferedReader은 String으로만 입력을 받을 수 있다.

BufferedWriter의 특징!

  • BufferedWriter는 버퍼 스트림을 생성하여 출력되는 데이터를 버퍼링하여 한번에 출력하는 특징을 가진다. 고로 System.out.prinln과 비교 했을 때 데이터의 양이 많아질 수록 더 효율적으로 데이터를 출력할 수 있고 시간도 단축 된다. 개행이 포함되어 있지 않기 떄문에 "\n", 개행을 따로 추가해주어야 하고 flush()를 통해 버퍼에 남은 데이터를 출력해주는 일, 버퍼를 다 쓰고 종료해주는 close()를 실행주는 것이 좋다.

2. 코드

import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

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