Daily LeetCode Challenge - 875. Koko Eating Bananas

Min Young Kim·2023년 3월 8일
0

algorithm

목록 보기
86/198

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
    }
}
profile
길을 찾는 개발자

0개의 댓글