알고리즘

BufferReader로 입력받을 때 StringTokenizer를 사용해야 하는 경우

chadongmin 2023. 5. 27. 17:54

자바에서 키보드 입력을 받을 때는 Scanner를 사용하는 방법과 BufferReader를 사용하는 방법이 있습니다.

 

알고리즘 문제를 풀 때는 시간이 중요하기 때문에 속도가 빠른 BufferReader를 많이 사용하곤 합니다.

 

Scanner는 1KB의 버퍼를 갖기 때문에 입력이 바로 전달되는 반면, BufferReader는 8KB 크기의 버퍼를 가져 buffer에 입력들을 저장했다가 한 번에 전송하기 때문에 속도가 빠릅니다.

이미지 출처 : https://dlee0129.tistory.com/238

또한, Scanner는 입력을 읽는 과정에서 내부에서 정규 표현식 적용, 입력값 분할, 파싱 과정 등을 거치기 때문에 속도가 느립니다.

 

BufferReader는 타입이 String타입으로 고정이 되어 있습니다. 그래서 Integer.ParseInt() 와 같은 메소드를 호출하여 형변환을 해주어야 합니다.

또한 BufferReader은 readLine()이라는 메소드를 호출하여 키보드 입력을 받습니다. 그런데 이 readLine은 엔터만 경계로 인식합니다.

그래서 알고리즘 문제를 풀 때 한 줄에 공백으로 기준으로 나눠진 정수가 주어지는 상황에서는 StringTokenizer를 필수적으로 사용해야 합니다.