거리를 구하는 문제이므로 거리를 기준으로 탐색
거리보다 적은 간격을 가진 바위 제거
제거한 바위 개수가 n이 될 때까지 탐색 진행
import java.util.Arrays;
public class NUM43236 {
public static void main(String[] args) {
int distance = 25;
int[] rocks = {2, 14, 11, 21, 17};
int n = 2;
System.out.println(solution(distance, rocks, n));
}
public static int solution(int distance, int[] rocks, int n) {
int answer = 0;
Arrays.sort(rocks);
int[] distances = new int[rocks.length+1];
distances[0] = rocks[0];
for(int i = 1 ; i < rocks.length ; i++){ distances[i] = rocks[i] - rocks[i-1]; }
distances[distances.length-1] = distance - rocks[rocks.length-1];
int start = 0;
int end = distance+1;
while(start < end){
int mid = (start + end)/2;
int remove = 0, current = 0;
for(int i = 0 ; i < distances.length ; i++){
current += distances[i];
if(current < mid){ remove++; }
else { current = 0; }
}
if(remove < n){ start = mid+1; }
else if(remove > n){ end = mid; }
else { start = mid+1; }
}
answer = start-1;
return answer;
}
}
current 변수가 가진 의미
*다른 분들의 코드를 참고하여 작성했습니다