Kotlin에서 대량의 입력을 빠르게 처리하려면 BufferedReader를 사용하는 것이 일반적입니다.
특히 코딩 테스트처럼 입력이 많은 환경에서는 기본 readLine()보다 훨씬 뛰어난 성능을 제공합니다.
하지만 BufferedReader는 단독으로 사용되지 않습니다.
System.in과 InputStreamReader를 함께 사용하여 입력 스트림을 효율적으로 처리합니다.
BufferedReader는 입력 데이터를 버퍼에 저장해 두었다가 한 줄씩 읽어오는 클래스입니다.
입출력(I/O)은 비용이 큰 작업이기 때문에, 한 번에 많이 읽어두고 처리하는 것이 성능상 유리합니다.
System.in은 표준 입력(Standard Input) 스트림입니다. 쉽게 말해, 우리가 콘솔에서 입력하는 데이터를 프로그램으로 전달해주는 통로입니다.
즉, System.in은 문자열이 아니라 바이트 스트림입니다.
InputStreamReader는 바이트 스트림을 문자 스트림으로 변환해주는 역할을 합니다.
즉, 데이터 흐름은 다음과 같습니다.
System.in (바이트 입력) -> InputStreamReader (문자 변환) -> BufferedReader (버퍼링 + 줄 단위 읽기)
import java.io.BufferedReader
import java.io.InputStreamReader
val br = BufferedReader(InputStreamReader(System.`in`))
val n = br.readLine().toInt()
val input = br.readLine()
기본 readLine()은 내부적으로 입력 스트림에 직접 접근하는 방식이라 입력이 많으면 느려질 수 있습니다. 반면 BufferedReader는
특히 수만~수십만 줄 입력을 처리할 때 속도 차이가 확연히 드러납니다.
🎯 결론
BufferedReader는 단순한 입력 도구가 아니라
이 세 가지가 함께 동작하는 구조입니다.
다음과 같은 경우 반드시 사용하는 것이 좋습니다.
입력이 많다면 readLine() 대신 BufferedReader 조합을 기본값처럼 사용하는 것이 좋습니다.