
A와 B를 입력받아 그 합을 출력하는 간단한 문제입니다.
효율적인 입출력을 위해 기존의 Scanner와 split() 대신, BufferedReader 와 StringTokenizer 를 활용한 새로운 접근을 시도해 보았습니다.
자주 사용하던 Scanner 클래스는 편리한 입력 처리 기능을 제공하지만, 상대적으로 느린 속도를 가지고 있습니다.
이는 입출력 처리 과정에서 동기화(synchronization)가 발생하기 때문인데요, 데이터가 많은 경우 실행 속도에 영향을 줄 수 있습니다.
반면, BufferedReader 는 버퍼(buffer)를 사용하여 데이터를 읽기 때문에 훨씬 빠른 속도를 제공합니다.
특히, 반복적으로 많은 데이터를 입력받고 처리해야 하는 문제에서는 그 차이가 더욱 두드러집니다.
문자열을 특정 구분자(예: 공백, 콤마 등)로 나누는 작업에서 흔히 사용되는 split() 메서드는 내부적으로 정규표현식(Regular Expression)을 사용합니다. 이로 인해 코드가 간단해지는 장점이 있지만, 처리 속도가 느릴 수 있습니다.
반면, StringTokenizer는 단순한 구분자 처리에 특화되어 있어 더 빠르고 메모리 효율적입니다.
따라서, 문자열 분리가 단순한 문제에서는 split()보다 StringTokenizer를 사용하는 것이 유리합니다.
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static void solution() 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(), " "); // 각 줄을 공백으로 분리
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
sb.append(a + b).append("\n");
}
br.close();
System.out.println(sb);
}
public static void main(String[] args) throws IOException {
solution();
}
}
split()과 Scanner가 편리하다는 이유로 습관적으로 사용했지만, 효율성을 고려한 선택이 더 나은 코드로 이어진다는 점을 다시 한번 깨닫게 되었습니다.split()이 더 적합할 수 있으므로 상황에 맞는 도구를 선택하는 것이 중요합니다.