코딩 테스트에서 주어진 데이터를 입력받기 위해 BufferedReader
또는Scanner
를 사용한다.
Scanner
는 입력을 띄어쓰기와 개행 문자를 경계로 가져오고 데이터 타입을 그대로 가져올 수 있어 추가적인 작업이 필요없지만,
BufferedReader
는 입력을 개행 문자만을 경계로 가져오고 데이터 타입은 String으로만 제한되어 있기때문에 추가적인 작업이 필요하다.
따라서
BufferedReader
를 사용할 경우, 문자열을 특정 문자를 기준으로 분리해주는StringTokenizer
와 타입 변환 함수(예시.Integer.parseInt(String str)
)도 같이 쓰이는 편이다.
사용자로부터 입력을 받을 때, 버퍼를 사용하지 않는다면 키보드의 입력이 즉시 프로그램으로 전달된다.
하지만, 버퍼를 사용한다면 키보드의 입력이 버퍼로 전달된다.
이때, 버퍼가 가득 차거나 개행 문자가 나타나면 프로그램으로 버퍼의 내용을 한 번에 전송한다.
입력
1 3
입력을 BufferedReader
로 받아오는 코드
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int K = Integer.parseInt(st.nextToken());
System.in
와 같은 InputStream
는 바이트 단위의 데이터를 문자 단위가 아닌 1byte씩 가져오므로 문자를 온전히 가져올 수 없다.
따라서 InputStream
을 InputStreamReader
로 감싸줘 바이트 단위 데이터를 문자 단위로 처리할 수 있게 해준다.
Reference