반응형
입력
값을 입력하는 클래스로 Scanner를 보편적으로 많이 사용한다.
하지만 백준처럼 시간제한이 있는 경우, BufferedReder를 통해 사용자에게 값을 입력 받는다.
그 이유는 Scanner의 buffer 크기가 1kb로 입력을 받는 순간 바로 프로그램에게 전송한다.
BufferedReder는 8kb 의 크기를 가지고 있기 때문에 buffer에 값을 저장 했다가 한번에 프로그램에게 전송하기 때문에 더 빠르다.
또 Scanner는 nextInt, nextFloat처럼 값을 읽을 때 내부적으로 정규표현식을 사용하거나, 파싱, 입력값 분할등의 과정을 거치면서
속도가 저조하다.
문자 자르기
문자열을 자르는 split 대신 StringTokennizer 사용한다.
split도 정규표현식을 이용해 문자열을 구분하기 때문에 속도가 느리다.
그래서 StringTokenizer를 사용한다.
출력
출력하는 클래스로 System.out.println이 아니라 StringBuilder를 사용한다.
이유는 System.out.println은 문자를 바로 출력한다.
출력하는 과정에서 동기화처리가 되어 있기 때문에 다른 스레드의 대기시간이 발생하고, 출력이 잦아질수록 오버헤드가 발생한다.
하지만 StringBuilder는 문자열들을 모아서 단 한번 출력하기 때문에 오버헤드가 발생하지 않는다. 따라서 속도면에서 우수하다.
반응형
'개발 > 알고리즘' 카테고리의 다른 글
백준 1182번 : 부분수열의 합 (0) | 2023.01.26 |
---|---|
백준 11723번 : 집합 (0) | 2023.01.25 |
백준 6603번 : 로또 (0) | 2023.01.20 |
백준 10971번 : 외판원 순회 2 (0) | 2023.01.20 |
백준 10819번 : 차이를 최대로 (0) | 2023.01.18 |