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()