[백준] for_15552번 : 빠른 A+B
문제
코드
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());// a,b값 입력..string으로 입력되니까 한번만 입력받아도된다.
bw.write(Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken())+"\n");
}
bw.flush();
bw.close();
}
}
풀이
이 문제는 1.5초의 제한시간 내에 100만개의 테스트케이스를 실행시킬 수 있도록 해야하기 때문에
Scanner와 System.out.println를 사용하면 풀 수 없다.
Scanner는 구문분석을 하기 때문에 정규식을 거쳐 시간이 오래걸린다.
그에 반해 BufferedReader와 BufferedWriter는 구문분석을 하지 않기 때문에 빨리 실행된다.
Scanner ---> BufferedReader
System.out.println ---> BufferedWriter
를 사용한다고 생각하면 된다.
BufferedReader와 BufferedWriter를 선언해주고 필요한 import를 해준다.
BufferedReader는 예외처리를 꼭 해주어야한다.
throws IOException을 하거나 try~catch로 예외처리를 해준다.
BufferedReader는 문자열을 리턴하기 때문에
Integer.parseInt로 형변환을 시켜준다.
StringTokenizer를 사용하여 br.readLine()에 저장해놓은 값들을
공백을 기준으로 나눠준다.
그러고 bw.write로 출력해준다.
bw.write는 System.out.println 같이 자동개행기능이 없기때문에 뒤에 "\n"을 사용하여 개행을 시켜준다.
StringTokenizer에 nextToken()함수를 쓰면 readLine()을 통해 입력받은 값을 공백단위로 구분하여 순서대로 호출할 수 있다.
st는 문자열이기때문에 Integer.parseInt로 형변환 해준다.
BufferedWriter 의 경우 버퍼를 잡아 놓았기 때문에 반드시 flush() / close() 를 반드시 호출해주어야 한다.