YD_S 개발로그
article thumbnail
Published 2023. 6. 20. 15:58
백준 15552번 - 빠른 A+B 알고리즘

문제

 

접근방법

  • Java : Scanner.next(), System.out.println() 
  • Kotlin : readLine(), println()    (java의 함수도 사용할 수 있다.)

위 언어 별로 각각의 입출력(I/O) 함수가 제공된다. 사용법은 간단하지만 해당 함수는 느린 입출력(Slow I/O)에 해당한다.

그렇기에 BufferedReaderBufferedWrite를 사용하면 빠른 입출력(Fast I/O)을 할 수 있어 속도면에서 유리하다.

 

Scanner는 왜 느릴까?

  1. Scanner의 버퍼는 1 KB를 갖고 있어 버퍼 사이즈가 작기 때문에 빈번히 버퍼를 비워줘야하는 반면 BufferedReader는 8 KB의 버퍼를 갖고 있어 버퍼에 담을 수 있는 입력값이 많습니다.
  2. 입력을 받을 때 정규식을 이용해 입력값을 파싱한다. 예를 들면 1,234,567의 값을 입력받으면 숫자 사이에 콤마가 있어도 정수로 파싱해준다.

결론적으로 Scanner는 작은 버퍼 사이즈정규식 과정을 거치기 때문에 느린 것이다.

 

 

 

백준의 입력 속도 비교 표를 보면 Scanner와 BufferedReader의 속도 차가 4초 이상이 걸리는 것을 확인할 수 있다. 

https://www.acmicpc.net/blog/search/%EC%9E%85%EB%A0%A5+%EC%86%8D%EB%8F%84 

 

블로그 - 전체 글

여러가지 언어와 입력 방법을 이용해서 시간이 얼마나 걸리는지 비교해 보았습니다. 방법: 첫째 줄에 정수의 개수 N (= 10,000,000), 둘째 줄부터 N개의 줄에 한 개의 자연수(10,000 이하)가 적힌 파일

www.acmicpc.net

 

정답

 

 

 

Reference

https://codingnotes.tistory.com/217


https://www.acmicpc.net/problem/15552

 

'알고리즘' 카테고리의 다른 글

백준 2745번 - 진법 변환  (0) 2023.06.23
백준 2563번 - 색종이  (0) 2023.06.23
백준 1316번 - 그룹 단어 체커  (0) 2023.06.22
백준 11382번 - 꼬마 정민  (0) 2023.06.19
백준 1008번 - A/B의 결과는?  (0) 2023.06.19
profile

YD_S 개발로그

@YD_S

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!