코딩테스트 풀이
프로그래머스 코딩테스트 - 기지국 설치
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