반응형

여기서 생활화하자는 것은 서버나 안드로이드 개발할 때가 아닌 PS문제 풀 때를 말한다.

 

println보다 bufferedWriter가 훨씬 빠르다. 그 이유는 입력된 데이터가 바로 전달되지 않고 버퍼를 통해 전달되다 보니 훨씬 더 빠르다고 한다. 그래서 출력해야할 값이 많은 경우 단순히 for문에 println을 넣지 않고 bufferedWriter를 사용하여 출력해주자. 

또한 bufferedReader, bufferedWriter를 통해 입출력이 모두 끝났으면, close해서 닫아주자. 예시 코드는 아래와 같다.

fun main() {
    val arr = IntArray(10001)
    val br = System.`in`.bufferedReader()
    val bw = System.`out`.bufferedWriter()
    repeat(br.readLine().toInt()) {
        arr[br.readLine().toInt()]++
    }
    br.close()
    arr.forEachIndexed { index, value ->
        bw.write("${index}\n".repeat(value))
    }
    bw.close()
}

여러 개의 출력값이 있을 때 Stringbuilder를 통해 출력해주었는데, 백준 10989번에서 Stringbuilder는 통과가되지 않고 BufferedWriter만 통과가 되는 것을 확인할 수 있었다.

다시 말해서, 많은 문자열을 줄바꿈으로 저장할 때는 메모리 효율 측면에서 BufferedWriter의 성능이 StringBuilder보다 좋다.

또한 Array<Int>보다 IntArray가 효율이 더 좋다는 것을 어디선가 봤던 것 같은데(아마도 Kotlin in Action), 이렇게 Array를 기본 타입으로 바꿀 수 있을 때는 바꿔줘야겠다. 

 

실버5라고 무시하고 풀었다가 크게 혼났던 문제였다.

반응형

+ Recent posts