본문 바로가기
  • 살짝 구운 김 유나
Algorithm/Programmers

[Lv.3] 기지국 설치 - JavaScript

by yunae 2023. 3. 6.

문제

https://school.programmers.co.kr/learn/courses/30/lessons/12979

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

풀이

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)

=> 각각 자릿수를 지정할 수도 있음

 

 

 

댓글