Skip to content

Commit 3bcd87f

Browse files
committed
feat: Leet_800_Koko_Eating_Bananas
1 parent e2d8660 commit 3bcd87f

2 files changed

Lines changed: 71 additions & 1 deletion

File tree

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Leet_800_Koko_Eating_Bananas
2+
3+
## 문제 링크
4+
https://leetcode.com/problems/koko-eating-bananas/
5+
6+
## 카테고리
7+
`이분탐색`
8+
9+
## 접근 방식
10+
하나의 일차원 배열이 있고 그 배열의 모든 조건을 부합하는 최소의 정수 N을 구하는 문제이다.
11+
이를 구하기 위해서 먼저 1 ~ max까지의 선형적인 수들의 최댓값 max를 정의하고 그 max 사이의 값을 이분탐색으로 찾아준다
12+
```
13+
14+
while(start <= end){
15+
long mid = (start + end) / 2;
16+
17+
if(canEat(mid)) {
18+
ans = mid;
19+
end = mid -1;
20+
}
21+
else start = mid + 1;
22+
}
23+
```
24+
25+
## 코드
26+
```java
27+
package ver2.Leet_800_Koko_Eating_Bananas;
28+
29+
class Solution {
30+
int[] piles;
31+
int h;
32+
33+
public int minEatingSpeed(int[] piles, int h) {
34+
this.piles = piles;
35+
this.h = h;
36+
long ans = 0;
37+
long max = -1;
38+
39+
for(int p : piles){
40+
max = Math.max(p,max);
41+
}
42+
43+
long start = 1;
44+
long end = max;
45+
46+
while(start <= end){
47+
long mid = (start + end) / 2;
48+
49+
if(canEat(mid)) {
50+
ans = mid;
51+
end = mid -1;
52+
}
53+
else start = mid + 1;
54+
}
55+
56+
return (int)ans;
57+
}
58+
59+
private boolean canEat(long time){
60+
long cnt = 0;
61+
62+
for(int p : piles){
63+
cnt += (p + time -1)/ time;
64+
}
65+
66+
return cnt <= h ? true : false;
67+
}
68+
}
69+
```

src/ver2/Solution.java renamed to src/ver2/Leet_800_Koko_Eating_Bananas/Solution.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ver2;
1+
package ver2.Leet_800_Koko_Eating_Bananas;
22

33
class Solution {
44
int[] piles;
@@ -48,6 +48,7 @@ private boolean canEat(long time){
4848
하나의 일차원 배열이 있고 그 배열의 모든 조건을 부합하는 최소의 정수 N을 구하는 문제이다.
4949
이를 구하기 위해서 먼저 1 ~ max까지의 선형적인 수들의 최댓값 max를 정의하고 그 max 사이의 값을 이분탐색으로 찾아준다
5050
```
51+
5152
while(start <= end){
5253
long mid = (start + end) / 2;
5354

0 commit comments

Comments
 (0)