[백준/JAVA] 반복문 - 15552번 빠른 A+B

신승현·2022년 8월 7일
0

더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!


📝 문제


15552번 빠른 A+B


🤷‍♂️ 접근 방법


이번 문제는 기존 문제와는 달리 시간 제한이 조건으로 주어졌습니다. 그래서 기존에 입출력 방식으로 사용했던 Scanner, System.out.println() 은 사용할 수 없고 BufferedReader, Bufferedwriter 를 사용해야 합니다.

그럼 먼저 두 방식이 어떻게 다른지 개념을 익히고 코드를 통해 살펴보겠습니다.


📌BufferedReader, Bufferedwriter

대부분의 경우 데이터 입력 시 Scanner를 사용하는데요. Scanner의 경우, regular expression 정규표현식을 많이 사용함으로 사용자가 직접 파싱하는게 더욱 빠릅니다. 이의 대안이 될 수 있는 방법이 바로 BufferedReader 입니다.

버퍼를 사용하지 않는다면 키보드를 통해 입력하는 즉시 바로 프로그램에 전달됩니다.

그러나 BufferedReader의 경우 키보드에 입력이 있을 때마다 문자를 버퍼에 저장하고, 버퍼가 가득차거나 개행문자가 나타나면 버퍼의 내용을 한 번에 전송하기에 더욱 빠른 속도를 낼 수 있습니다.
또한, BufferedReader는 Enter만을 개행문자로 인식하고, 데이터 타입이 String 로 일정합니다. 하여 int 형으로 사용할려면 형변환이 필요합니다.

BufferedReader, Bufferedwriter 사용법

//BufferedReader를 이용한 데이터 입력
import java.io.BufferedReader;
import java.io.BufferedWriter;

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader 선언
        String str = br.readLine(); // String
        int num = Integer.parseInt(br.readLine()); // Int 형변환
        
        //방법1
        StringTokenizer st = new StringTokenizer(str); // StringTokenizer에 입력 문자열 넣음
		int a = Integer.parseInt(st.nextToken()); 
		int b = Integer.parseInt(st.nextToken()); 

		//방법2
		String array[] = str.split(" "); // 공백마다 데이터 구분해서 배열에 넣음
    }
}

방법1은 StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있습니다.

방법2는 String.split()함수를 활용하여 배열에 공백단위로 끊어서 데이터를 넣고 사용하는 방식입니다.


✍ 풀이


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 cnt = Integer.parseInt(br.readLine());

        for(int i =0; i < cnt; i++){
            String str = br.readLine();
            int num1 = Integer.parseInt(str.split(" ")[0]);
            int num2 = Integer.parseInt(str.split(" ")[1]);
            bw.write(num1 + num2 + "\n");
        }
        
        br.close();

        bw.flush();
        bw.close();

    }
}

Reference


profile
I have not failed. I've just found 10,000 ways that won't work. - Thomas A. Edison

0개의 댓글