문제 - 1552
1. position 배열에 해당 baskets의 위치가 저장되어있다.
2. m개의 볼을 basket에 넣어야된다.
3. basket에 넣으면 해당 볼의 거리만큼 자기장이 생긴다. 이 자기장을 최대로 만들 수 있는 결과를 출력
어제와 같이 이진탐색문제이다. 그래서 자기장의 거리를 기준으로 처음과 끝을 정해준다. 거리는 최소 1이며 최대 1000000000이여서 이로 설정.
해당 거리했을 때 m개의 볼을 넣을 수 있는지를 판단하여 거리를 조절해준다.
import java.util.*;
class Solution {
public int maxDistance(int[] position, int m) {
int ans=0,start=1,end = 1000_000_000;
Arrays.sort(position);
while(start <= end)
{
int mid = (start + end)/2;
if(isCanPutBall(position,m,mid))
{
start = mid +1;
ans = Math.max(ans,mid);
}else{
end = mid -1;
}
}
return ans;
}
boolean isCanPutBall(int[] position,int m,int k)
{
int count =1;
int preV = position[0];
for(int i=1; i< position.length; i++)
{
int cnt = position[i];
if(cnt - preV >= k)
{
count++;
preV = cnt;
}
}
return count >= m;
}
}