평소처럼 Scanner랑 System.out.print를 사용하였는데, 시간초과로 나왔다.
Scanner는 입력 받으면 구문분석을 위해 정규식을 거치게 되고 그 과정에서 속도가 현저히 느려지게 된다. 그래서 BufferedReader를 사용하면 구문분석 과정이 없어지기 때문에 속도 제약 문제가 발생하지 않는다.
테스트의 개수가 최대 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);
}
}