문제 풀이 아이디어는 Python 풀이와 같습니다. 단지.. 지금 약간 혼동이 오는게,,, 자바와 비슷한 코드로 작성했는데, 코틀린은 시간 초과
가 나고 자바
는 통과되네요.
다른 방식을 생각해야 할 것 같은데,,, 좀 어렵네요.
import java.util.Scanner
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
val n = sc.nextInt()
val m = sc.nextInt()
val arr = IntArray(n+1) {0}
for (i in 1..n) arr[i] += arr[i-1] + sc.nextInt()
var i: Int
var j: Int
for (k in 0 until m) {
i = sc.nextInt()
j = sc.nextInt()
println(arr[j] - arr[i-1])
}
sc.close()
}
코딩 고수님들 어떻게 풀어야 하는지 알려주세요..
참고로 BufferedReader
로는 이미 시도 해봤습니다만, Scanner
보다 더 빠르게 시간초과가 나네요...
스트링 출력 관련 조언을 하나 들었습니다. println
을 난발하면 출력에 많은 시간이 걸린다는 것입니다. 코틀린과 자바는 매우 비슷하기 때문에 자바에서의 풀이법을 생각하면 충분히 코틀린에서도 가능합니다.
자바도 이와 비슷하게 System.out.println
을 난발하면 출력에 많은 시간이 걸린다고 합니다. 코틀린에서 System.out.println
을 담당하는 것이 println
이기 때문에 이를 stringBuilder에 담아서 한 번에 출력
하는 것이 시간을 줄일 수 있는 방법으로 조언을 들었습니다. 밑은 이를 반영한 코드입니다. 실제로 몇줄 수정 안했습니다. 물론 시간은...하하... 파이썬에 비해서 6배 정도 느리네요. 아마 kotlin compiler에서 시간을 좀 먹는게 아닌가 생각듭니다. 그래도 정말 복잡한 코드이면 당연히 kotlin이 더 빠를겁니다. 인터프리터와 컴파일 언어는 거기서 차이가 나니까유..ㅎㅎ
import java.util.Scanner
fun main(args: Array<String>) {
val sc = Scanner(System.`in`)
val n = sc.nextInt()
val m = sc.nextInt()
val arr = IntArray(n+1) {0}
for (i in 1..n) arr[i] += arr[i-1] + sc.nextInt()
var i: Int
var j: Int
var sb = StringBuilder()
for (k in 0 until m) {
i = sc.nextInt()
j = sc.nextInt()
sb.append((arr[j] - arr[i-1]).toString() + "\n")
}
println(sb)
sc.close()
}