Problem From.
https://leetcode.com/problems/koko-eating-bananas/
오늘 문제는 piles 배열이 주어질때, 한번에 k 개의 바나나를 먹는다고 할때 정해진 시간 h 안에 바나나를 먹을 수 있는 최소의 k 를 구하는 문제였다.
오늘 문제 역시 binary search 를 통해서 풀 수 있었는데, 먼저 min 을 1 max 를 piles 의 최대값으로 설정해두고, 그 중간값인 mid 를 구한다.
mid 를 사용하여 piles 의 각각의 원소를 나누어서 각각의 원소를 처리하는데 얼마의 시간이 걸리는지 cnt 에 더한 다음, cnt 가 주어진 시간 h 보다 적으면 max 를 mid 로 줄이고, h 보다 크다면 min 을 mid + 1 로 올리는 식으로 풀 수 있었다.
class Solution {
fun minEatingSpeed(piles: IntArray, h: Int): Int {
var min = 1
var max = piles.max()!!
var mid = 0
while(min < max) {
var cnt = 0
mid = (max + min) / 2
piles.forEach {
if(it % mid == 0) {
cnt += it / mid
}else {
cnt += it / mid + 1
}
}
if(cnt <= h) max = mid
else min = mid + 1
}
return min
}
}