Leetcode Java Koko Eating Bananas
업데이트:
문제
코드
class Solution {
public int minEatingSpeed(int[] piles, int h) {
int left = 1;
int right = 1000000000;
while (left < right) {
int mid = (left + right) / 2;
int times = 0;
for (int pile : piles) {
times += (pile + mid - 1) / mid;
}
if (times > h) {
left = mid + 1;
} else {
right = mid;
}
}
return left;
}
}
결과
설명
- 바나나의 갯수가 저장된 piles를 h 시간동안 다 먹을 수 있는 시간당 바나나의 수를 구하는 문제이다.
- 단, 시간 당 먹을 수 있는 바나나의 수가 piles에서 고른 바나나의 수보다 크다면 선택한 바나나의 갯수까지 먹고 다음 시간에 piles 내 바나나를 선택하여 먹을 수 있다.
-
left와 right는 시간 별 먹을 수 있는 바나나의 수를 탐색하기 위한 위치 변수로, 최소 갯수인 1과 최대 갯수인 1,000,000,000으로 초기화한다.
- left가 right 미만까지 아래를 수행한다.
- mid는 left와 right의 중앙 값으로, $\frac{left + right}{2}$를 넣어준다.
- times는 piles의 값을 이용하여 시간 당 mid개를 먹을 때, 소요되는 시간을 저장한다.
- times가 h보다 큰 경우, left에 $mid + 1$을 넣어 시간 당 먹을 수 있는 바나나의 갯수를 증가시켜 범위을 좁힌다.
- times가 h보다 크지 않는 경우, right에 mid를 넣어 시간 당 먹을 수 있는 바나나의 갯수를 감소시켜 범위를 좁힌다.
- 반복이 완료되면 piles를 h 시간동안 다 먹을 수 있는 시간당 바나나의 수를 탐색한 left를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기