본문 바로가기
Problem Solving/BOJ

[BOJ][Kotlin]22193 풀이

by NoiB 2022. 11. 14.
반응형

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

 

22193번: Multiply

Write a program that computes a product of two non-negative integers A and B. The integers are represented in decimal notation and have N and M digits, respectively.

www.acmicpc.net

이번에는 최대 50000자리 수의 곱셈입니다. 당연히 python이라면 아무 문제없이 하던대로 하셔도 되구요. 코틀린이어도 사실 크게 차이는 없습니다만, 저는 편의성 때문에 Scanner를 많이 썼는데 이번엔 Scanner를 쓰니까 시간초과가 나서 BufferedReader를 사용해보았습니다. 풀이를 작성할 정도인가 싶기도 하지만, 공부의 일환이라 생각하고 적어보겠습니다.

import java.math.BigInteger

fun main() {
    val br = System.`in`.bufferedReader()
    val bw = System.`out`.bufferedWriter()
    var n = br.readLine()
    var a:BigInteger = BigInteger(br.readLine())
    var b:BigInteger = BigInteger(br.readLine())

    println(a*b)
}

BufferedWriter도 선언했었는데 막상 사용하지는 않았네요(버퍼로 전달하기 때문에 println보다 빠르다고 합니다). Scanner로 받던게 BufferedReader가 된 것 말고는 평범합니다. 그럼 왜 속도차이가 나는지 알아봐야겠죠.

 

일단 Scanner와 BufferedReader의 가장 큰 차이 버퍼의 용량이라고 하는데요. Scanner의 경우 버퍼에 1024개의 문자를 저장할 수 있는 반면, BufferedReader는 8192개의 문자를 저장할 수 있다고 합니다. 8배 정도의 용량차이가 나네요. 이게 왜 속도에 영향을 미치냐 하면, Scanner의 경우 담아둘 수 있는 공간이 작아서 BufferedReader에 비해 버퍼를 훨씬 자주 비워야하기 때문입니다. 홀 서빙하는 분들을 보면 한 번에 엄청나게 많이 옮기시는 분들이 있잖아요. 여러 번 왔다갔다 하면서 나눠주는 것 보다 한 번에 많이 들고와서 나눠주는게 훨씬 빠른 것과 비슷한 이치라고 생각하시면 될 것 같습니다.

반응형

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ][Python]3578 풀이  (0) 2022.11.22
[BOJ][Python]11034 풀이  (0) 2022.11.15
[BOJ][Kotlin]14928번 풀이  (0) 2022.11.14
[BOJ][Python]11660번 풀이  (0) 2022.07.31