코딩테스트 풀이

프로그래머스 코딩테스트 - 기지국 설치

hanlabong 2024. 11. 23. 22:41
728x90

문제 설명

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

[프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

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

해결 방법

아이디어

1 2 3 4 5 6 7 8 9 10

 

이렇게 기지국이 설치되어 있다고 했을 때 설치할 수 있는 최소한의 수는 기지국의 범위가 닿지 않는 아파트 단지의 길이를 기지국 범위로 나눈 후 소수점 올림을 해주면 된다.

 

즉 위의 경우 기지국의 볌위가 3이기 때문에

1 2 3 4 5 6 7 8 9 10

 

빨간색 영역에서 설치할 기지국은 1개가 되고, 초록색 영역에 설치할 기지국도 1개가 된다.

만약 10번에 기지국이 설치되어 있지 않아 초록색 영역이 4로 늘어난다면 4 / 3을 올리한 2가 설치 개수가 된다. 

해당 아이디어를 바탕으로 작성한 코는 아래와 같다.

  • 기지국 범위 구하기 (w * 2 + 1)
  • 마지막 기지국이 아파트 옥상을 커버하지 못한다면
    • 옥상을 초과하는 기지국 추가
  • 기지국을 순회하며
    • 기지국이 도달하지 못한 밑의 층 계산 (end)
    • end가 존재한다면
      • (end / 기지국 범위) 올림
    • 기지국의 범위를 벗어난 첫 번 째 층 계산

코드

function solution(n, stations, w) {
    var answer = 0;
    const length = w * 2 + 1
    let start = 1;
    if (stations[stations.length-1] < n + w){
        stations.push(n + w + 1);
    }
    
    stations.forEach((s) => {
        const end = s-w-start
        if (end){
            answer += Math.ceil(end / length)
        }

        start = s + w + 1
    })

    return answer;
}
728x90