본문 바로가기
Computer Science/Algorithm

[JAVA] 빠른 A+B

by soro.k 2022. 3. 2.

https://st-lab.tistory.com/30?category=830885

 

[백준] 15552번 : 빠른 A+B - JAVA [자바]

https://www.acmicpc.net/problem/15552 15552번: 빠른 A+B 첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다...

st-lab.tistory.com

*해당 포스팅은 상단에 링크된 포스팅을 바탕으로 개인 공부 목적을 위해 작성되었으므로 자세한 내용은 위 링크를 확인해 주시기 바랍니다.


 

제출 코드

BufferedReader + StringBuilder

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

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int num = Integer.parseInt(br.readLine());
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < num; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            int A = Integer.parseInt(st.nextToken());
            int B = Integer.parseInt(st.nextToken());

            sb.append(A + B);
            sb.append("\n");
        }
        System.out.println(sb);
    }
}

습관적으로 Scanner클래스를 사용하다가 위 블로그에서 배운 BufferedReader와 StringBuilder에 이제서야 좀 익숙해진 것 같다. 그래도 여전히 너무 정직하게 코드를 짜기도 하고 BufferedReader를 close하는 것을 까먹는다.

 

 

위 블로그에서 가져온 예시 코드

public class Main {
 
	public static void main(String[] args) throws IOException {
 
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
		int N = Integer.parseInt(br.readLine());
        
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
        
		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(br.readLine()," ");
			sb.append(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())).append('\n');
		}
		br.close();
 
		System.out.println(sb);
 
	}
}

 

하지만 데이터 양이 많아지면 많아질수록 추후에는 BufferedReader의 속도가 더 빠르다고 한다. 특히 이번 문제는 Scanner를 사용했다면 시간 초과가 떴을 거고, 문제 자체에도 입출력 방식의 속도가 강조되어 있어 BufferedReader로도 코드를 작성해 보았다.

 

 

BufferedReader + BufferedWriter

import java.io.*;
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 num = Integer.parseInt(br.readLine());
        StringTokenizer st;

        for(int i = 0; i < num; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())) + "\n");
        }
        br.close();

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

 

 

참고. 위 블로그에서는 속도를 더 줄이기 위해 StringTokenizer를 사용해 공백을 기준으로 문자열을 분리하지 않고 String.substring()을 사용했다. 

 

 

 

 

 

'Computer Science > Algorithm' 카테고리의 다른 글

[JAVA] A+B - 5  (0) 2022.03.03
[JAVA] X보다 작은 수  (0) 2022.03.03
[JAVA] 주사위 세 개  (1) 2022.03.01
[JAVA] 곱셈  (0) 2022.02.22
[JAVA] 나머지  (0) 2022.02.22