Java에서 입력을 받을 때 일반적으로 Scanner를 사용하지만, BufferedReader는 입력 속도가 훨씬 빠르기 때문에 코딩 테스트에서 권장되고 있다.
1. Scanner와 BufferedReader 차이점
비교 항목 | Scanner | BufferdReader |
입력 속도 | 느림 | 빠름 |
버퍼 크기 | 작음 (1KB) | 큼 (8KB ~ 16KB) |
입력 방식 | 직접 읽음 | 버퍼에 저장 후 처리 |
사용법 | 간단 | InputStreamReader와 함께 사용 |
파싱 지원 | nextInt(), next() 등의 메서드 제공 | 직접 split() 또는 StringTokenizer 사용 필요 |
2. BufferedReader가 더 빠른 이유
- Scanner는 입력을 받을 때 한 글자씩 읽고 즉시 처리하기 때문에 속도가 느리다.
- 반면 BufferedReader는 버퍼(메모리 공간)에 데이터를 한 번에 읽고 나중에 처리하므로 성능의 훨씬 좋다.
- 코딩 테스트에서는 대량의 데이터를 처리해야 하기에 BufferedReader를 선호한다.
3. BufferedReader 사용 예제
3-1. 기본 입력 처리
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 한 줄 입력 받기
String input = br.readLine(); // Hello, World!
System.out.println("입력값: " + input); // 입력값: Hello, World!
}
}
- readLine()은 한 줄 전체를 읽어오기 때문에 공백이 포함된 입력도 처리할 수 있다.
3-2. 정수 입력 받기 (Integer.parseInt 사용)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 숫자 입력 받기
int num = Integer.parseInt(br.readLine()); // 10
System.out.println("입력된 숫자: " + num); // 입력된 숫자: 10
}
}
- Scanner의 nextInt()와 달리 BufferedReader는 문자열을 반환하므로, 숫자로 변환해야 한다.
3-3. 여러 개의 정수 입력 받기 (공백 구분)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 한 줄에 여러 숫자가 공백으로 입력될 경우
String[] inputs = br.readLine().split(" "); // 5 7
int a = Integer.parseInt(inputs[0]);
int b = Integer.parseInt(inputs[1]);
System.out.println("두 숫자의 합: " + (a + b)); // 두 숫자의 합: 12
}
}
- split(" ")을 사용하여 공백 기준으로 나눈 뒤, Integer.parseInt()로 변환해야 한다.
3-4. StringTokenizer를 사용하여 빠르게 입력 처리
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));
// StringTokenizer 사용 (더 빠름)
StringTokenizer st = new StringTokenizer(br.readLine()); // 3 4
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
System.out.println("두 숫자의 곱: " + (a * b)); // 두 숫자의 곱: 12
}
}
- StringTokenizer는 split() 보다 빠르게 문자열을 나누는 방법이다.
정리
코딩 테스트에서는 BufferedReader + StringTokenizer 조합이 가장 효율적!
- Scanner보다 BufferedReader가 입력 속도가 빠름 (코딩 테스트에 유리).
- readLine() 으로 입력을 받아 split() 또는 StringTokenizer 를 활용하여 원하는 형태로 변환.
- 숫자 입력 시 Integer.parseInt() 로 변환 필요.
'Coding Test' 카테고리의 다른 글
HashSet이란?(+ TreeSet, LinkedHashSet) (0) | 2025.02.07 |
---|---|
StringBuilder란? (1) | 2025.02.04 |
코딩 테스트 준비 (0) | 2025.02.03 |
문자 개수 세기 (0) | 2024.07.15 |
StringBuilder (0) | 2024.07.10 |