언어+프레임워크/JAVA

[JAVA] 코테 기본기(3): 빠른 입출력 템플릿 (Scanner + System.out.println 쓰면 망해요!)

깃짱 2025. 9. 8. 10:00
반응형
반응형

 

코딩테스트에서는 알고리즘을 잘 짜는 것도 중요하지만, 입출력 속도 때문에 정답을 맞추고도 시간 초과(TLE)가 나는 경우가 자주 있습니다. 특히 자바는 ScannerSystem.out.println을 그대로 쓰면 위험합니다.

이 포스팅은 ‘프로그래머스’ 플랫폼을 통해서 시험을 본다면 전혀 볼 필요가 없습니다

✅ 왜 Scanner + println이 망할까?

  • Scanner는 내부에서 정규식을 써서 입력을 파싱하기 때문에 매우 느립니다.
  • System.out.println은 출력할 때마다 버퍼를 비우기 때문에 출력이 많으면 병목이 생깁니다.

즉, 입력이 수천~수만 줄 이상 들어오는 문제에서는 그대로 쓰면 시간 초과가 날 확률이 높습니다.

실제로도 입출력만 바꿔도 통과하는 경우가 생길 정도입니다!

✅ 빠른 입력 (BufferedReader + StringTokenizer)

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        // 입력
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int a = Integer.parseInt(st.nextToken());
        int b = Integer.parseInt(st.nextToken());
    }
}
  • BufferedReader → 입력 전체를 버퍼에 모아두고 빠르게 읽음
  • StringTokenizer → 공백 단위로 쪼개기 좋음 (split 대체)

✅ 빠른 출력 (StringBuilder)

StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
    sb.append(i).append("\n");
}
System.out.print(sb);
  • println을 매번 쓰지 말고,
  • StringBuilder에 모아서 한 번에 출력하면 속도가 크게 개선됩니다.

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형