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 |