[Algorithm] 백준: 15552 빠른 A+B (Java11)

m_ngyeong·2025년 3월 11일
0

Algorithm

목록 보기
3/8
post-thumbnail

15552 빠른 A+B


BufferedReaderBufferedWriter :

문제 풀기 앞서,
BufferedReaderBufferedWriter에 대해 몇가지 알고 가자.

Scanner/System.out.println 대신하여 BufferedReader/BufferedWriter 를 사용하는 이유는 몇 십만, 몇 백만건 대량의 데이터를 보다 빠르게 처리하기 위해서이다.

입출력 작업(IO)과 문맥 교환(Context Switching)은 생각보다 느린 작업이므로, 키보드 입력이 발생할 때마다 프로그램에 전달하는 것보다, 입력을 한 번에 모아 전달하는 방식이 더 효율적이다.
이는 마트에서 물건을 살 때, 하나씩 계산대에 가져가 결제하는 것보다 쇼핑카트에 모아두었다가 한 번에 계산하는 것이 더 빠른 것과 같은 원리다.

그러나 BufferedReader에도 몇 가지 단점이 있다.

  • IOException 예외 처리가 필수적이다.
  • 입력받은 모든 데이터가 String으로 반환된다.
  • 데이터를 줄 단위로 입력받아야 하므로, 직접 split(" ")을 사용해 처리해야 한다.
  • 숫자로 변환하려면 Integer.parseInt() 등의 형변환 과정이 필요하다.

예를 들어, 입력 데이터로 1 2 3이 들어왔다고 가정하자.
ScannernextInt()를 사용하면 [1, 2, 3]을 개별 숫자로 바로 받을 수 있다.
반면, BufferedReaderreadLine()을 사용하면 "1 2 3"이라는 문자열로 받아지므로, 이를 split(" ")로 나눈 뒤 Integer.parseInt()를 통해 숫자로 변환해야 한다.


문제:

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

정답:

방법1

import java.io.BufferedReader; 
import java.io.InputStreamReader;
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

import java.io.IOException; // BufferedReader를 사용함으로써 예외처리 필수
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 T = Integer.parseInt(br.readLine()); // String으로 리턴값 고정, Integer.parseInt 통해 형변환 필요

        StringTokenizer st;
        
        for(int i=1; i<= T; 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(); // close() 메소드를 명시해주지 않아도 Garbage Collector에 의해 BufferedReader 및 내부의 객체들이 자동으로 정리됨
        bw.flush();   // 화면에 출력, 필요할 때 한 번만 수행해주면 됨
        //bw.close(); // 자원 관리의 중요성으로 인해 해주면 좋음
    }
}

방법2

아래와 같은 방법으로도 풀 수 있다.


import java.io.*;

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 T = Integer.parseInt(br.readLine());
        
        for(int i=1; i<= T; i++){
            String s = br.readLine();
            int A = Integer.parseInt(s.split(" ")[0]); //첫번째 호출
            int B = Integer.parseInt(s.split(" ")[1]); //두번째 호출
             
            bw.write((A+B)+"\n"); // 버퍼에 씀
        }
        bw.flush(); // 화면에 출력
    }
}


참고, https://velog.io/@jkh9615/알고리즘-백준-15552-빠른-AB-Java

profile
ʚȉɞ

0개의 댓글