ComputerScience/Java
BufferedReader와 StringTokenizer
imachill7guy
2025. 2. 24. 13:38
✅ BufferedReader란?
BufferedReader는 빠른 입력을 위해 사용하는 Java 클래스
- Scanner보다 입력 속도가 빠름
- 버퍼(기본 8192바이트) 를 사용해 여러 문자를 한 번에 읽어옴
- 입력 속도가 중요한 문제 (예: 백준, 코딩 테스트) 에서 주로 사용됨
📌 사용법
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine(); // 한 줄 입력 받기
StringTokenizer st = new StringTokenizer(input); // 기본적으로 공백 기준으로 분리
while (st.hasMoreTokens()) {
System.out.println(st.nextToken()); // 한 개씩 출력
}
}
}
📌 특징
- readLine()은 한 줄(문자열 전체) 을 입력받음 (공백 포함)
- 숫자를 입력받을 때는 Integer.parseInt()로 변환 필요
- 예외 처리 (IOException) 필요
✅ StringTokenizer란?
StringTokenizer는 문자열을 특정 기준(공백, 쉼표 등)으로 분리하는 클래스야.
- split()보다 메모리 사용량이 적고 빠름
- 주어진 문자열을 토큰(단어 단위로 나눈 값)으로 분리
- 백준 등 알고리즘 문제에서 입력을 빠르게 처리할 때 사용
📌 사용법
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class StringTokenizerExample {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine(); // 한 줄 입력 받기
StringTokenizer st = new StringTokenizer(input); // 기본적으로 공백 기준으로 분리
while (st.hasMoreTokens()) {
System.out.println(st.nextToken()); // 한 개씩 출력
}
}
}
📌 특징
- StringTokenizer(input, 구분자) → 특정 구분자로 문자열을 분리
- st.hasMoreTokens() → 남은 토큰이 있는지 확인
- st.nextToken() → 다음 토큰 반환
📌 예제 입력 & 출력
입력값
10 20 30 40 50
출력값
10
20
30
40
50
🚀 📌 BufferedReader + StringTokenizer 조합 (빠른 입력 처리)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class FastInput {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine()); // 첫 줄에서 정수 입력 받기
StringTokenizer st = new StringTokenizer(br.readLine()); // 두 번째 줄을 공백 기준으로 분리
int sum = 0;
while (st.hasMoreTokens()) {
sum += Integer.parseInt(st.nextToken()); // 문자열을 정수로 변환해 더하기
}
System.out.println(sum);
}
}
🛠 BufferedReader + StringTokenizer 조합의 장점
✅ BufferedReader → 빠른 입력
✅ StringTokenizer → 공백 기준으로 빠르게 분리
✅ Integer.parseInt() → 정수 변환
🎯 정리
방법입력 속도특징사용 예제
Scanner | 느림 | 간편, 기본 제공 | 일반적인 입력 처리 |
BufferedReader | 빠름 | 한 줄 단위로 읽기 | 대량 데이터 입력 |
StringTokenizer | 빠름 | 공백 기준으로 분리 | 공백/쉼표 기준 문자열 분리 |
✔ 추천 사용법:
- 단순한 입력: Scanner
- 긴 줄 입력: BufferedReader
- 공백 구분 데이터: StringTokenizer
🚀 코딩 테스트에서는 BufferedReader + StringTokenizer 조합이 가장 빠르다!