본문 바로가기

Algorithm/프로그래머스

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

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

 

코딩테스트 연습 - 기지국 설치

N개의 아파트가 일렬로 쭉 늘어서 있습니다. 이 중에서 일부 아파트 옥상에는 4g 기지국이 설치되어 있습니다. 기술이 발전해 5g 수요가 높아져 4g 기지국을 5g 기지국으로 바꾸려 합니다. 그런데 5

programmers.co.kr

while문 돌면서 기지국을 왼쪽부터 하나씩 찍어가는 방식(?)으로 해도 괜찮았을거 같은데

인덱스를 잘못 지정했는지 값이 제대로 안나오길래

각각의 간격 별로 기지국을 몇 개 설치해야 하는지 구하는 식으로 풀었다.

 

Math.ceil을 썼더니 효율성에서 시간 초과가 나서..ㅜㅜ 실수연산은 가급적 하지 말아야겠다는 교훈을 얻었다.

 

class Solution {
    public int solution(int n, int[] stations, int w) {
        int answer = 0;
        int r = 2 * w + 1;

        // 왼쪽 끝
        int left = stations[0] - w - 1;
        if (left > 0) {
            answer += (left + r - 1) / r;
        }

        // 오른쪽 끝
        int right = n - stations[stations.length - 1] - w;
        if (right > 0) {
            answer += (right + r - 1) / r;
        }

        // 나머지
        for (int i = 1; i < stations.length; i++) {
            int gap = stations[i] - stations[i-1] - 2 * w - 1;
            answer += (gap + r - 1) / r;
        }

        return answer;
    }
}