우선 제약을 보면 최대 10만까지 주어지는 것을 볼 수 있다.
가장 간단하게 푸는 방법은 송신기의 범위를 찾고 끝날 때 다시 세로운 송신기를 지정해주며 나가면 된다.
function hackerlandRadioTransmitters(x, k) {
// Write your code here
// 정렬
x = x.sort((v1, v2) => v1 - v2);
// 송신기의 수
let transmitters = 0;
let i = 0;
let n = x.length;
while(i < n) {
transmitters++;
// 가장 작은 값 + 송신기의 범위
let loc = x[i] + k;
// 송신기의 범위 찾기, i가 배열의 범위를 벗어나지 않고,
// 현재 집의 위치 x[i]가 loc보다 작거나 같을 때까지 i를 증가
while (i < n && x[i] <= loc) {
i++;
}
// 위에 포문이 끝났다는 것은 한 쿼터의 송신기가 끝
// 다음 또 송신기 설정을 위한 loc 지정
// while 루프가 종료되면 i가 송신기의 범위를 벗어난 위치를 가리키므로,
// 다음 송신기를 설치하기 위해 i를 감소.
// 이후 다시 loc을 계산하고,
// 다시 while 루프를 사용하여 송신기의 범위에 해당하는 집들을 찾습니다.
loc = x[--i] + k;
while (i < n && x[i] <= loc) {
i++;
}
}
return transmitters;
}