Algorithm/Baekjoon

[백준] 15552번 : 빠른 A + B - Java

unknownomad 2022. 2. 21. 11:48

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

 

15552번: 빠른 A+B

첫 줄에 테스트케이스의 개수 T가 주어진다. T는 최대 1,000,000이다. 다음 T줄에는 각각 두 정수 A와 B가 주어진다. A와 B는 1 이상, 1,000 이하이다.

www.acmicpc.net



주의점

  • 시간 제한 : 1.5초(1500ms) 이내
  • Scanner : 사용 시 시간 초과
  • System.out.println : 시간 초과

구현 방법

1. 입력

1.1. BufferedReader + StringTokenizer

  • 필요할 때마다 StringTokenizer 클래스를 생성해줘야 함

1.2. BufferedReader + String.substring()

  • StringTokenizer처럼 클래스 생성 없이 바로 활용 가능 ➡ 메모리 줄일 수 있음

 

2. 출력

2.1. BufferedWriter

  • 버퍼에 담은 후
  • 한 번에 데이터 내보냄

2.2. StringBuilder

  • 하나의 문자열로 계속 연결시킨 후
  • 가장 마지막에 연결된 하나의 문자열 출력

WHY NOT Scanner?

Scanner

  • 정규식(Regular Expression)이 굉장히 많이 들어가있음
  • 알고리즘에서 사용자가 필요에 따라 파싱(Parsing)하는 게 더 빠르기에 BufferedReader가 더 좋음

풀이

1. BufferedReader + StringTokenizer + BufferedWriter

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 br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int T = Integer.parseInt(br.readLine());      
        StringTokenizer st;

        for (int i = 0; i < T; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            bw.write((Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())) + "\n");
        }
        
        br.close();
        bw.flush(); //버퍼를 비운 뒤(flush)
        bw.close(); //닫아줘야 함(close)
    }
}

 

2. BufferedReader + StringTokenizer + 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));
        StringBuilder sb = new StringBuilder();
 
        int T = Integer.parseInt(br.readLine());
        StringTokenizer st;
        
        for (int i = 0; i < T; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            sb.append(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())).append('\n');
        }

        br.close();
        System.out.println(sb);
    }
}

 

3. BufferedReader + String.substring() + StringBuilder

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
 
public class Main {
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        
        int T = Integer.parseInt(br.readLine());

        for (int i = 0; i < T; i++) {		
            String str = br.readLine();
            int target = str.indexOf(" ");
            int result = Integer.parseInt(str.substring(0,target)) + Integer.parseInt(str.substring(target + 1));		
            sb.append(result+"\n");
        }
		
        br.close();
        System.out.print(sb);
    }
}

성능

  • BufferedReader > Scanner
  • String.substring() > StringTokenizer
  • BufferedWriter / StringBuilder > System.out.println()

출처 : https://st-lab.tistory.com/30