항상 코딩테스트를 공부할 때 시간초과가 촉박하지 않은 문제들은 scanner를 사용하곤 했는데,
백준 푸는 난이도가 높아질수록 항상 시간초과가 발생해서 bufferReader를 사용하는 습관을 들여야 겠다고 생각했다.
대략적으로 알고는 있지만, scanner와 bufferReader의 차이를 정확하게 잘 모르겠어서
이번 포스팅을 작성하면서 공부를 해보려고 한다.
Scanner는 입력받은 데이터를 다양한 타입으로 변환하여 반환한다.
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String st = sc.nextLine();
데이터를 한번에 읽어와 버퍼에 보관한 후 버퍼에서 데이터를 읽어오는 방식으로 동작하는 클래스이다.
사용자가 입력한 스트림을 한꺼번에 읽는다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
...
public static void main(String[] args) throws IOException {
BufferReader br = new BufferedReader(InputStreamReader(System.in));
String st = br.readLine();
int a = Integer.parseInt(br.readLine());
int b = Integer.parseInt(st);
}
내가 생각할 땐 Scanner는 사용하기 간편한 대신에, 메모리 용량, 처리속도가 느려서 빠른 실행시간을 요구하는 코딩테스트에 적합하지 않다고 생각한다.
BufferReader는 사용하기 복잡한 대신, Scanner보다 훨씬 처리 속도가 빠르기 때문에 코딩테스트에 주로 사용이된다.
더 구체적으로
BufferReader는 입력사항을 String으로만 받는다.
내가 int 형을 입력받고 싶은데 br를 사용하려면 형변환을 무조건 해줘야한다.
반면, Scanner는 각각의 자료형에 맞게 입력을 받을 수 있는 메소드가 존재한다.

상황에 따라 간편하게 Scnner를 사용할 수 있겠지만, bufferReader를 사용하는 연습을 더 해야겠다.
참조자료
[https://velog.io/@gawgjiug/%EC%9E%90%EB%B0%94JAVA-Scanner-BufferedReader]