15552 - 빠른 A+B
by yuyeol3, 2026-01-01
이 문제는 PS 언어를 자바로 바꾸면서 빠른 입출력을 연습하기 위해 푼 문제이다. 가끔 시간복잡도에 문제가 없음에도 입출력 과정에서 시간이 많이 걸려 TLE를 받는 경우가 있기 때문에, 빠른 입출력을 쓰는 습관을 기르는 것이 좋다.
문제 자체는 단순하다. 먼저 테스트케이스 개수 T가 주어지고, 테스트케이스 개수만큼 A,B를 입력받아 덧셈을 수행해 출력하면 된다. 그러나 테스트케이스 최대 개수가 100만 개이므로, 빠른 입출력을 사용해야 하는 문제이다.
코드
알고리즘 자체에는 특별한 점이 없다. T를 읽어와서, 그 횟수만큼 반복하며 A, B를 입력받아 덧셈하고 출력한다.
주목할 점은 입,출력을 하는 방식이다. System.out.println이나 Scanner 객체를 쓰는 것이 아니라 BufferedReader, BufferedWriter인스턴스를 먼저 생성한다. 이 두 클래스는 입/출력 과정에 버퍼를 도입하여 버퍼가 꽉 차거나 입/출력이 끝날 때까지 기다렸다가 한번에 데이터를 내보낸다. 따라서 한 글자씩 읽고 쓰는 것보다 훨씬 빠르다.
또한 a, b를 읽어올 때 StringTokenizer를 사용한다. 문자열의 split()메서드는 정규식을 사용하여 느리지만, StringTokenizer은 단순히 구분자를 기준으로 문자열을 토큰화하므로 더 빠르다.
또한 BufferedWriter을 사용할 때 명시적으로 flush()와 close()를 수행하는 것이 좋다.
import java.io.*; import java.util.*; 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()); for (int i = 0; i < T; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); bw.write(a+b + "\n"); } bw.flush(); bw.close(); } }
시간복잡도
시간복잡도는 단순히 테스트케이스 수 만큼 더하기 연산을 수행하므로 이다.
댓글 불러오는 중...