Kotlin bufferedReader, bufferedWriter를 생활화하자
2021. 12. 8. 13:04
반응형
여기서 생활화하자는 것은 서버나 안드로이드 개발할 때가 아닌 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라고 무시하고 풀었다가 크게 혼났던 문제였다.
반응형
'프로그래밍 > 안드로이드+코틀린' 카테고리의 다른 글
Android Studio wifi로 앱 무선 디버깅하기 (0) | 2022.01.29 |
---|---|
비동기 1편 - Android에서 Dispatcher란? (0) | 2022.01.21 |
안드로이드 모듈은 어떻게 나누는 것이 좋을까? (0) | 2021.11.04 |
Diffutil의 areItemsTheSame, areContentsTheSame에 대해 알아보자 (0) | 2021.10.24 |
kotlin 함수 선언 위치 null object reference 오류 (0) | 2021.09.06 |