문제 풀이 아이디어는 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()
}
profile
'개발'은 '예술'이고 '서비스'는 '작품'이다

0개의 댓글