[백준] 15552번 빠른 A+B (JAVA)

sarah·2022년 8월 30일
0

BaekJoon

목록 보기
1/11

평소처럼 Scanner랑 System.out.print를 사용하였는데, 시간초과로 나왔다.

1. Scanner를 사용하면 안되는 이유

Scanner는 입력 받으면 구문분석을 위해 정규식을 거치게 되고 그 과정에서 속도가 현저히 느려지게 된다. 그래서 BufferedReader를 사용하면 구문분석 과정이 없어지기 때문에 속도 제약 문제가 발생하지 않는다.

2. Print를 사용하면 안되는 이유

테스트의 개수가 최대 1,000,000번이 될 수 있는데, for문으로 매번 print하면 시간 초과가 발생한다.
그래서 이 문제를 해결하기 위해선 저장한 값을 저장했다가 마지막에 한번 출력하면 된다. 저장하는 방법으로 BufferedWriter와 StringBuilder가 있는데 후자를 선택했다. (이유는 더 익숙해서..)

BufferedReader와 StringBuilder를 사용해서 문제를 풀어보자!

import java.io.IOException;
import java.io.BufferedReader;
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 count = Integer.parseInt(br.readLine());
        
		StringTokenizer st;
		StringBuilder sb = new StringBuilder();
        
		for (int i = 0; i < count; i++) {
			st = new StringTokenizer(br.readLine()," ");
			sb.append(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()) + System.lineSeparator());
		}
        
		br.close();
 
		System.out.println(sb);
 
	}
}

0개의 댓글