문제
https://school.programmers.co.kr/learn/courses/30/lessons/12979
풀이
1. stations을 순회하면서 기지국의 전파가 닿지 않는 구간을 차례대로 찾는다.
2. 구간을 커버하는 기지국의 최소 개수를 answer에 누적해서 더한다.
3. 마지막으로 커버된 지역의 인덱스부터 맨 마지막 지역까지도 빠짐없이 커버해준다.
코드
function solution(n, stations, w) {
var answer = 0;
const len = stations.length;
const coverage = 2 * w + 1;
// 지역의 번호는 1부터 시작한다.
let cur = 1;
for (let s of stations) {
// cur 부터 현재 기지국이 커버하는 구간의 바로 앞 인덱스까지의 길이
let cnt = s- w - cur;
// 설치되어야 하는 기지국의 최소 개수
answer += Math.ceil(cnt / coverage);
// 현재 기지국이 커버하는 구간의 바로 다음 인덱스로 cur를 갱신
cur = s + w + 1;
}
// 마지막으로 커버된 인덱스가 아직 n보다 작을 경우
if (cur < n + 1) {
// 빠짐없이 기지국 설치해주기
answer += Math.ceil((n - cur + 1) / coverage);
}
return answer;
}
💡 What I Learned
Math.ceil -> 입력받은 숫자보다 크거나 같은 정수 중 가장 작은 정수 리턴 (올림)
Math.ceil(num);
Math.floor -> 입력받은 숫자보다 작거나 같은 정수 중 가장 큰 정수 리턴 (내림)
Math.floor(num)
=> 각각 자릿수를 지정할 수도 있음
'Algorithm > Programmers' 카테고리의 다른 글
[Lv.3] 여행 경로 - JavaScript (0) | 2023.03.11 |
---|---|
[Lv.3] 징검다리 건너기 - JavaScript (0) | 2023.03.07 |
[Lv.2] 최솟값 만들기 - JavaScript (0) | 2023.03.05 |
[Lv.3] 네트워크 - JavaScript (0) | 2023.02.28 |
[Lv.3] 최고의 집합 - JavaScript (0) | 2023.02.27 |
댓글