-해법
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));
StringTokenizer st; // 공백 구분을 위한 StringTokenizer
String t = br.readLine(); // 테스트 케이스의 수 입력
for(int i=1;i<=Integer.parseInt(t);i++){ // 테스트 케이스의 수만큼 반복
st = new StringTokenizer(br.readLine()); // 입력되는 두 수를 공백으로 구분하기 위해 StringTokenizer 객체 생성
bw.write(Integer.parseInt(st.nextToken())+Integer.parseInt(st.nextToken())+"\n"); // 공백으로 구분된 두 수를 정수화한 뒤 개행문자로 처리
}
bw.flush();
bw.close();
br.close();
}
}
이 문제의 경우 테스트 케이스의 수가 많으면서 제한시간이 적을 때 사용해야 하는 클래스에 대해 숙지할 수 있는 문제라고 생각한다. 필자의 경우 Java를 사용하기 때문에 BufferedReader, BufferedWriter 클래스를 사용하며, 이 두 가지의 클래스는 기존에 사용하던 입력의 Scanner와 출력의 System.out.println() 보다 처리속도가 빠르기 때문에 이번 문제와 같은 경우에 효율적이다.
BufferedReader 클래스의 경우 readLine()메소드를 이용해 입력받는 정보를 한 줄 단위의 문자열로 읽어내기 때문에 공백 구분을 위한 데이터를 조작해주어야 한다. 첫 테스트 케이스의 경우 하나의 숫자만 입력되기 때문에 readLine() 메서드를 활용해 입력받은 뒤, 반복문의 조건에서 정수형 변환을 해주어야 한다.
StringTokenizer 클래스는 공백으로 문자열을 분리하는 방법 중 하나로, BufferedReader 객체로 읽어 낸 한 줄의 문자열을 매개변수로 객체를 생성해 nextToken() 메서드를 통해 분리된 문자열을 읽어온다. 초기화 과정은 반복문의 시작에서 데이터가 입력되는 시점에 반복하여 수행해준다.
BufferedWriter 클래스는 bw.write() 메소드를 이용해 데이터를 문자열로 출력하게 된다. 이때, 필자의 경우 별도의 변수를 사용하지 않고 메서드 내에서 데이터들을 정수형 변환을 시켰기 때문에 더해진 정수가 문자형으로 처리되어 아스키코드가 출력되는 현상이 발생하는데, 이를 해결하기 위해 문자열로 변환과 동시에 개행을 수행할 수 있는 \n개행문자를 붙여주면 제대로 된 합이 문자열 형태로 출력된다.
위의 방식말고 String.valueOf()를 활용해 문자열로 변환시킨 뒤 newLine() 메서드를 통해 개행을 하는 방식 또한 존재하지만, 필자는 문자열로 처리하는 write() 메서드에서 정수형 변환된 데이터가 아스키코드로 나오는 현상에 대한 이해가 부족하여 위 방식을 사용하기 위해 많은 구글링을 하였다....