본문 바로가기
Algorithm/Programmers Java

[JAVA] 프로그래머스 LEVEL3 기지국 설치

by 제우제우 2024. 10. 30.

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

 

프로그래머스

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

programmers.co.kr

코딩테스트 연습 > Summer/Winter Coding(~2018) > 기지국 설치

 

난이도: LEVEL3

알고리즘 유형: 구현 

 

내가 틀렸던 부분 

첫 번째 station의 커버 범위가 1번 아파트까지 커버하는 경우를 생각 못했다.

 

ex)

내 코드에서는 필요한 구간의 크기를 need로 표현하는데 

만약 첫 번째 station의 위치가 4이고 w가 10이면 station이 커버하는 범위가 4 - 10 = -6 이라는 결과가 나와서 

결과가 이상해진다. 

정답 코드 

class Solution {
    static int answer = 0;
    public int solution(int n, int[] stations, int w) {
        int size  = stations.length; // 시작 기지국 개수 
        int range = (w * 2) + 1; // 1개의 기지국이 전파는 최대 범위 
        int end   = 0; // 현재 기지국까지 전달된 범위 
        int index = 0;
        while(end < n){
            if(index < size){
                // 설치된 기지국 index
                int po = stations[index++];
                if(end < po - w){ // 만약 현재 end에 기지국 전파가 안 닿는다면
                   int need = po - w - end - 1;
                   answer += need / range;
                   answer += need % range == 0 ? 0 : 1; 
                }
                end = po + w;
                continue;
            }    
            // 남은 기지국이 없다면 
            int need = n - end;
            answer += need / range;
            answer += need % range == 0 ? 0 : 1; 
            end = n;
        }
        return answer;
    }
}