코딩테스트/자바 문제풀이

[새싹: 빠른 입출력] 백준 15552

승요나라 2024. 7. 5. 23:50

15552번: 빠른 A+B

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

 

# 코드

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 Main {
    public static void main(String[] args) throws IOException {
        // 빠른 입출력을 위한 BufferedReader 와 BufferedWriter
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 테스트 케이스의 개수 T 입력받기 (int형으로 변환)
        int t = Integer.parseInt(br.readLine());

        // 각 테스트 케이스, 즉 두 정수의 문자열 분리를 위한 StringTokenizer
        StringTokenizer st;

        for (int i = 0; i < t; i++) {
            // 매 반복마다(=라인마다) StringTokenizer 생성과 동시에 문자열 입력받기 (" "를 구분자로 하여 문자열 분리)
            st = new StringTokenizer(br.readLine()," ");

            // StringTokenizer.nextToken()으로 분리된 토큰을 반환하는데,
            // 반환되는 타입이 String이므로 Integer.parseInt()를 통해 int형으로 변환
            // 변환한 두 토큰을 더해준 값을 BufferedWriter.write()에 넣어준다.
            bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()))+ "\n");
        }
        // Reader 버퍼 닫기
        br.close();

        // Writer 버퍼 비운 뒤(flush) 닫기(close)
        bw.flush();
        bw.close();

    }
}

 

  • Java에서 빠른 입출력을 위해서는 Scanner와 System.out.println 대신 BufferedReader BufferedWriter를 사용해야 한다고 한다.
  • Scanner나 System.out.println을 사용할 경우 내부적으로 정규식을 남발하기 때문에, 테스트 케이스가 늘어나면 늘어날수록 System.out.println 호출횟수에 의해 시간초과가 발생할 수 있기 때문이다.
  • 코딩테스트에서 시간단축은 매우 중요하기 때문에 앞으로의 문제풀이는 내사랑 Scanner와 작별하고 br, bw와 친해져보겠다. :) ..........