문제 - 1482
이분탐색으로 start = 0, end = bloomDay에서 제일 큰 날짜로 설정
날짜는 start + end / 2 로 기준으로 꽃이 몇개 피었는지 확인한다.
기준 날짜에 최대로 만들 수 있는 부케로 start와 end를 변경
bouquest의 갯수가 >= m : end = mid -1 갯수가 더 큰 경우이므로 조금 더 날짜를 낮게 만들 기 위해서
반대로는 start = mid +1 기준 날짜를 좀 더 크게만들기 위해서
import java.util.*;
class Solution {
public int minDays(int[] bloomDay, int m, int k) {
int start = 0, end = 0, ans = -1;
int n = bloomDay.length;
for(int i=0;i<n;i++)
{
end = Math.max(bloomDay[i],end);
}
while(start <= end)
{
int mid = (start + end) /2;
int bouquests = getNumOfBouquests(mid,bloomDay,k);
if(bouquests >= m)
{
end = mid -1;
ans = mid;
}else
{
start = mid + 1;
}
}
return ans;
}
int getNumOfBouquests(int day, int[] bloomDay, int limit)
{
int bouquests = 0;
int count = 0;
for(int i=0; i < bloomDay.length; i++)
{
//bloomed
if(bloomDay[i] <= day)
{
count++;
}else{//not bloomed
count = 0;
}
if(count == limit)
{
count = 0;
bouquests++;
}
}
return bouquests;
}
}