[프로그래머스] 기지국 설치
https://school.programmers.co.kr/learn/courses/30/lessons/12979#
N
stations
W
추가로 설치해야 하는 기지국의 수
이다.Math.ceil()
함수를 사용하면 시간초과가 난다.모듈러 연산(%)
을 사용한다.import java.util.*;
class Solution {
public int solution(int n, int[] stations, int w) {
int answer = 0;
// 전파가 퍼지는 범위
int lim = w * 2 + 1;
int start = 1; // 1번 아파트부터 시작
// 이미 설치된 위치 기준으로 설치해야 하는 아파트들(전파 안 닿는 아파트) 찾기
for(int i = 0; i < stations.length; i++) {
int nowStationPos = stations[i]; // 현재 아파트 위치
int end = nowStationPos - w - 1; // 전파 안닿은 위치 중 끝
// 1번 아파트가 이미 전파가 닿아 있는 경우
if(end < 1) {
start = nowStationPos + w + 1;
continue;
}
// 현재 전파 닿지 않은 아파트들의 범위
int len = end - start + 1;
// 그냥 올림 하면 시간초과 남
// answer += (int)Math.ceil(len / lim);
// 몫, 나머지 구하는 연산으로 올림하는 것과 같은 결과 찾기
int a = len / lim;
answer += a;
int b = len % lim;
// 나머지가 있으면 기지국 하나 더 설치해야 됨
if(b > 0) {
answer++;
}
// 다음 범위의 시작
start = nowStationPos + w + 1;
}
// 마지막 구역 범위 처리
int len = n - start + 1;
if(len > 0) {
// 아래의 연산은 위 for문 안과 같은 연산
// answer += (int)Math.ceil(len / lim);
int a = len / lim;
answer += a;
int b = len % lim;
if(b > 0) {
answer++;
}
}
return answer;
}
}