kim03208   5년 전

시간초과라는데.... 여기서 어떻게 고쳐야할지 막막합니다.

evenharder   5년 전

narr[i]가 int형이 표현가능한 최대값(2^31-1)일 수도 있는데, temp * temp에서 오버플로우가 발생해서 비교 연산이 제대로 진행되지 않을 것 같습니다. long으로 바꾸어보세요.

kim03208   5년 전

바꿔도 해결이 안됩니다.

evenharder   5년 전

narr만 바꾸면 안 됩니다. temp 등 오버플로우가 날 수 있는 연산과 관련되어 있는 모든 변수의 타입을 long으로 바꾸셔야 합니다.

moonge   5달 전

evenharder님 너무 감사합니다 Long으로 바꾸니  시간초과가 안나네요ㄷㄷ 잘못된 타입이면 타입에러가 날 줄 알았는데 올바른 비교연산을 실패해서 시간초과가 날 줄은 몰랐습니다.

fun main() = <i>with</i>(System.<i>`in`</i>.<i>bufferedReader</i>()) <b>{
</b>    val sb = StringBuilder()
    <i>repeat</i>(readLine().<i>toInt</i>()) <b>{
</b>        val (x, y) = readLine().<i>split</i>(' ').<i>map </i><b>{ it</b>.<i>toLong</i>() <b>}
</b>        var cnt = 0L
        var d : Long = y - x
        while(true) {
            if(cnt % 2 == 0L){
                val n : Long = cnt / 2
                if( d <= n*(n+1)) break
            }
            else {
                val n : Long = cnt / 2 + 1
                if( d <= n*(n+1)/2 + (n-1)*n/2) break
            }
            cnt += 1
        }
        sb.<i>appendLine</i>(cnt)
    <b>}
</b>    <i>print</i>(sb)
<b>}</b>

댓글을 작성하려면 로그인해야 합니다.