Baekjoon
[Java/Algorithm] BufferedReader vs. Scanner 분명한 속도 차이!
dev_haha
2023. 11. 9. 17:06
[Scanner]
- 직관적이고 내장 메소드가 많아서 활용성이 높다.
- 키보드로부터 입력받은 즉시 메모리 전송!
- 띄어쓰기와 개행문자(엔터)를 기준으로 입력 값 인식
사용법
객체생성 - 입력값 받기 - 리소스 닫기
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// Scanner 객체 생성
int n = sc.nextInt();
// 정수형 입력값 받을 땐 nextInt()
System.out.println(n);
sc.close();
// 리소스 닫기
}
}
[BufferedReaer]
- 버퍼를 거쳐서 메모리 전송!
- 키보드의 입력을 바구니(버퍼)에 차곡차곡 모아두었다가
- 한번에 쑝 전송하기 때문에 버퍼링이 없음!
- 개행문자로 경계 인식
- 입력 데이터값은 String으로 고정이기 때문에 데이터 가공 필수!
사용법
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
for (int i = 0; i < N/4; i++)
sb.append("long ");
System.out.println(sb.append("int").toString());
}
}
대부분 학교나 학원에서는 Scanner를 주로 사용한다. (간단하니까)
하지만 백준 문제 상위권 소스코드를 보면 대부분 BufferedReader를 사용하여 성능과 속도를 챙기고 있다.
실제 예시
내가 푼 문제 예시를 보면
위가 BufferedReader 사용
아래가 Scanner 사용
코드의 길이는 414B,415B로 비슷하지만
메모리와 시간의 차이를 보면 확 느껴지는 성능차이!