Search

[875] Koko eating Bananas

태그
Binary Search
Tier
Medium
날짜
2025/03/15

Question

Koko loves to eat bananas. There are n piles of bananas, the ith pile has piles[i] bananas. The guards have gone and will come back in h hours.
Koko can decide her bananas-per-hour eating speed of k. Each hour, she chooses some pile of bananas and eats k bananas from that pile. If the pile has less than k bananas, she eats all of them instead and will not eat any more bananas during this hour.
Koko likes to eat slowly but still wants to finish eating all the bananas before the guards return.
Return the minimum integer k such that she can eat all the bananas within h hours.
Example 1:
Input: piles = [3,6,7,11], h = 8 Output: 4
Plain Text
복사
Example 2:
Input: piles = [30,11,23,4,20], h = 5 Output: 30
Plain Text
복사
Example 3:
Input: piles = [30,11,23,4,20], h = 6 Output: 23
Plain Text
복사

Answer

class Solution: def minEatingSpeed(self, piles: List[int], h: int) -> int: piles.sort() start = 1 end = piles[-1] while start < end: speed = (start + end) // 2 time = sum(math.ceil(pile / speed) for pile in piles) if time > h: # 시간이 초과됨 -> 속도를 높여야 함 start = speed + 1 else: # 시간이 남거나 딱 맞음 -> 속도를 줄여서 다시 확인 end = speed return start
Python
복사
최적의 speed를 찾는 parametric search로 해석하고 이진탐색을 통해서 찾는다.
이진탐색을 사용한다는 아이디어를 떠올리는게 어렵다.