ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Tip 알고리즘 입력 받기
    Algorithm 2019. 12. 9. 13:59

    자바로 알고리즘 문제를 풀려할때 최대한 런타임 시간을 줄이려면 입력 받는 부분도 신경을 써주어야 한다.

    대표적으로 자바에서 입력을 받을땐 Scanner나 BufferedReader 를 많이 사용한다.

     

    그리고 BufferedReader가 Scanner보다 더 좋다는 걸 알고 있다.

    그런데 왜 좋은가..? 라는 궁금증이 들어 한번 조사를 해보았다.

     

    먼저 Scanner와 BufferedReader의 차이점이다.

      Scanner BufferedReader
    비동기 여부 동기 동기, 비동기
    버퍼 메모리 1024Byte ( 1KB ) 8192Byte ( 8KB )
    분석 방법 구문을 분석 문자 시퀀스

    버퍼의 용도는 컴퓨터 안의 프로세스 사이에서 데이터를 이동시킬 때 사용된다. 

    즉, 8KB의 데이터를 받을때 Scanner는 8번을 읽어야 하지만 BufferedReader는 한번만 읽으면 된다는 소리다..!
    또한 Scanner의 버퍼사이즈는 1024로 설정되어 있다. 그에비해 BufferedReader는 버퍼사이즈가 8192로 설정되어 있다.

     

    실제 코드로도 얼마나 차이가 나는지 살펴 보자

     

    fun main() {
    
        val file = File("C:\\Users\\rrad3\\IdeaProjects\\untitled\\src\\com\\kkomi\\file.txt")
    
        val startTime = Calendar.getInstance().time.time
    
        val scanner = Scanner(file)
    
        while (scanner.hasNextLine()) {
            scanner.nextLine()
        }
    
        val endTime = Calendar.getInstance().time.time
    
        println("${endTime - startTime}ms")
    
    }
    fun main() {
    
        val file = File("C:\\Users\\rrad3\\IdeaProjects\\untitled\\src\\com\\kkomi\\file.txt")
    
        val startTime = Calendar.getInstance().time.time
    
        val bufferReader = BufferedReader(FileReader(file))
    
        var readLine = bufferReader.readLine()
        while (readLine == "") {
            readLine = bufferReader.readLine()
        }
    
        val endTime = Calendar.getInstance().time.time
    
        println("${endTime - startTime}ms")
    
    }

    데이터 양은 한줄에 30문자에 80줄을 기준으로 측정하였다.

    대략적으로 Scanner를 사용할 시 30ms ~ 40ms 정도가 나왔고 BufferedReader를 사용시 평균 15ms 정도가 나왔다.

     

    적게는 2배 많에는 2.5배 정도? 차이가 났다.

    앞으로 입력을 받는거는 Scanner 보다는 BufferedReader를 사용하도록 하자..!

     

     

     

     

     

     

     

     

     

    'Algorithm' 카테고리의 다른 글

    백준 - 1, 2, 3 더하기 (9095)  (0) 2019.12.09
    백준 - 1로 만들기 (1463)  (0) 2019.12.08
    백준 - 유기농 배추 (1012)  (0) 2019.12.08
    백준 - 적록색약 (10026)  (0) 2019.12.08
    백준 - 미로 탐색 (2178)  (0) 2019.12.02

    댓글

Designed by Tistory.