
기존에 python을 활용해서 문제를 풀었을 때는 아예 고민조차 안 했던 것이다
왜냐면.. 빅오는 물론 시간에 대한 그 어떠한 것도 전혀 고려하지 않았다
당시 나는 백준이나, 프로그래머스 등의 계산 시간이 찍히는 것을 사용하는 대신 그냥 로컬에서 문제를 풀고 정확한 정답 값이 나오는 것만 확인했다.
그런데 올해, JAVA로 백준 실버달기를 목표로 두고나서 백준으로 문제를 본격적으로 풀기 시작하였고 문득 시간에 대한 의문이 들기 시작했다
내가 입력을 제대로 받고 있나? 그게 아니라면 더 빠르게 할 수 있지 않을까?

두 코드를 보면 둘다 맞았습니다! 라는 값을 내뱉지만 그 시간의 차이는 상당한 것으로 보인다
굉장히 간단한 문제임에서 거의 2배 가까이의 차이를 만든다
실제로 코드를 짜다보면 시간 에러로 인해 몇번이고 문제를 반복해서 풀게 된다
이 경우 Scanner가 아닌 BufferedReader를 사용하면 웬만한 문제를 해결할 수 있을 것이다
Scanner scan = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
입력값을 받는 두 코드이다
Scanner와 BufferedReader라는 두 입력을 사용했다.
입력을 읽어내는 도구로 netInt(), netLine() 등의 메서드를 통해서 여러 타입의 데이터를 읽어낸다
데이터를 문자로 입력받아 처리하기 위해 사용된다
특히, 입력 데이터를 버퍼에 저장하여 읽기 속도를 최적화 하였다
입력 데이터를 일정 크기만큼 메모리에 저장하여 읽기 속도를 향상한다
Scanner는 입력 데이터 값을 읽을 때 토큰이라는 매우 작은 단위로 처리를 하고, BufferedReader는 버퍼에 저장하여 이 단위로 데이터를 처리한다
Scanner는 이 과정에서 더 많은 메모리 연산과 스트림 접근이 발생하여 속도가 매우 느려지게 된다
Scanner에서는 데이터를 읽는 동시에 토큰화, 정규식 파싱, 형변환 연산까지 자동으로 수행되는데 이 과정에서 추가 연산이 발생하여 문자 자체로 받아오는 BufferedReader에 비해 속도가 느릴 수 밖에 없다
평소에도 Scanner 방식보다 BufferedReader 방식에 익숙해져서 높은 성능을 유지해보자 !