diff --git a/problems/0875-koko-eating-bananas/solution.py b/problems/0875-koko-eating-bananas/solution.py new file mode 100644 index 0000000..ba0c107 --- /dev/null +++ b/problems/0875-koko-eating-bananas/solution.py @@ -0,0 +1,14 @@ +def hours_needed(piles: list[int], k: int) -> int: + return sum(-(-p // k) for p in piles) + + +class Solution: + def minEatingSpeed(self, piles: list[int], h: int) -> int: + lo, hi = 1, max(piles) + while lo < hi: + k = (lo + hi) // 2 + if hours_needed(piles, k) <= h: + hi = k + else: + lo = k + 1 + return lo diff --git a/problems/0875-koko-eating-bananas/solution_test.py b/problems/0875-koko-eating-bananas/solution_test.py new file mode 100644 index 0000000..4a96f21 --- /dev/null +++ b/problems/0875-koko-eating-bananas/solution_test.py @@ -0,0 +1,14 @@ +import pytest +from solution import Solution + + +@pytest.mark.parametrize( + "piles, h, expected", + [ + ([3, 6, 7, 11], 8, 4), + ([30, 11, 23, 4, 20], 5, 30), + ([30, 11, 23, 4, 20], 6, 23), + ], +) +def test_min_eating_speed(piles, h, expected): + assert Solution().minEatingSpeed(piles, h) == expected