강의로 돌아가기
Ayteneve

효율성 테스트 케이스 2번만 실패

나머지는 다 통과하는데 효율성 테스트 2번만 실패합니다.
런타임 에러가 뜨지는 않은걸 보니 index나 div/0 문제는 아닌 거 같고
자료형 buffer overflow 문제같은데 도저히 모르겠네요 ㅠㅠ 도와주세요

작성중인 코드―solution.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.*
class Solution {
    fun solution(food_times: IntArray, k : Long) : Int {
        val foodQueue = LinkedList(food_times.indices
            .groupBy { food_times[it] }
            .toSortedMap()
            .toList())
        var takingTime = 0L
        var remainFoodCount = food_times.size
        var lastEatenFoodTakingTime = 0
        while(foodQueue.isNotEmpty()) {
            val currentFood = foodQueue.peekFirst()
            val nextTime : Long = takingTime + (currentFood.first - lastEatenFoodTakingTime) * remainFoodCount
            if(nextTime > k) break
            takingTime = nextTime
            remainFoodCount -= currentFood.second.size
            lastEatenFoodTakingTime = currentFood.first
            foodQueue.removeFirst()
        }
        return if(foodQueue.isEmpty()) -1
        else ArrayList<Int>().apply { foodQueue.forEach { it.second.forEach { add(it + 1) } } }.sorted()[((k - takingTime) % remainFoodCount).toInt()]
    }
}
  • jikimee64

    이게정녕 자바11이란말인가..

    jikimee64―2021.01.06 22:05
1 개의 답변
석지훈

(k - takingTime) % remainFoodCount).toInt() 부분이 int가아닌 long이 될 수 있습니다.

  • Ayteneve

    답변 주셔서 갑사합니다. while문 내 remainFoodCount를 .toLong()으로 캐스팅 해줘야 하는 문제였어요.

    Ayteneve―2020.09.22 09:56
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.