1. 이분 탐색을 하기 위해, rocks 배열을 오름차순으로 정렬한다.
2. 바위 <-> 바위의 최소거리의 최솟값을 low, 바위 <-> 바위의 최소거리의 최댓값을 high로 잡는다. 이때, 초기값을 계산해보면 바위 간 최소 거리는 1이고, 최대 거리는 distance만큼의 거리에 해당한다.
3. 바위 사이의 거리와 minDistance(=mid)값을 계산해보면서, minDistance 값보다 작은 바위는 제거하고, 제거하면서 제거해야 하는 바위수가 n보다 큰지 확인한다.
4. 이때, 최소거리보다 바위가 크다면, 바위를 제거하지 않고 이전 바위 값에 현재 바위 값을 저장한다.
5. 마지막 바위 간의 거리를 위의 로직과 동일하게 체크한다.
6. 만약 이 minDistance (=mid) 값이 제거할 수 있는 바위 개수 (n)보다 크다면, 좀 더 작은 범위에서 탐색을 반복한다.
7. 그것이 아니라, minDistance (=mid) 값이 작거나 같다면, 이를 충분히 만족하므로, 이들의 최댓값을 구하기 위해 좀 더 큰 범위에서 탐색을 반복한다.
canRemove()메서드를 떠올리는데 애를 많이 먹은 문제였다.
풀이 시간 : 1시간
내일은 2개의 기업에 대한 자기소개서 작성 및 멘토링을 가져볼 것이다.