
코딩 테스트에서 대용량 입출력을 처리할 때는 Scanner와 System.out.println보다 BufferedReader/Writer가 훨씬 빠릅니다!
// Scanner 방식 (느림)
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String str = sc.next();
// BufferedReader 방식 (빠름)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
StringTokenizer st = new StringTokenizer(line);
int n = Integer.parseInt(st.nextToken());
// System.out.println 방식 (느림)
System.out.println("결과1");
System.out.println("결과2");
// BufferedWriter 방식 (빠름)
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
bw.write("결과1\n");
bw.write("결과2\n");
bw.flush(); // ⭐ 중요! 마지막에 한 번만
문제: T개의 테스트케이스에서 각각 A+B를 출력 (T ≤ 1,000,000)
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));
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();
br.close();
}
}
import java.io.*;
import java.util.StringTokenizer;
java.io.*: 입출력 관련 모든 클래스 importStringTokenizer: 공백 기준 문자열 분리 도구public class Main {
public static void main(String[] args) throws IOException {
throws IOException: 입출력 예외 처리를 상위로 넘김BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.in)을 빠르게 읽기 위한 버퍼 생성BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
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(); // Writer 자원 해제
br.close(); // Reader 자원 해제
// ❌ 잘못된 사용 (성능 저하)
bw.write("1\n");
bw.flush();
bw.write("2\n");
bw.flush();
// ✅ 올바른 사용
bw.write("1\n");
bw.write("2\n");
bw.flush(); // 마지막에 한 번만
public static void main(String[] args) throws IOException {
// BufferedReader/Writer 사용 코드
}
bw.write(123); // ❌ char로 출력됨
bw.write(123 + ""); // ✅ 문자열 변환
| 방식 | 100만 개 처리 시간 |
|---|---|
| Scanner + println | 수 초 |
| BufferedReader + Writer | 1초 이내 |
코딩 테스트에서 시간 초과가 나면 BufferedReader/Writer로 바꿔보세요!
특히 테스트케이스가 10만 개 이상인 문제에서는 거의 필수입니다.