구현 문제
초기화 된 모습
idx
와 현재 전파가 들어오는 아파트(i
)의 범위 첫번째 stt
, 마지막 end
변수 선언idx
는 1
번째 아파트부터 세야 하니 1,stt
는 stations[i]-w
, end
는 stations[i]+w
가 된다.cnt
는 전파가 안들어오는 아파트의 개수인데 stt-idx
값이고,+1
을 해준다.if(idx<stt)
를 해준 이유는, idx
가 1
번째 아파트부터 시작하는데, 전파가 들어오는 아파트 범위가 1
번째일 경우나, 범위가 겹치는 경우에는 해당 값을 계산하면 안되기 때문에(다음에 계산해야 하기 때문에) 체크해준다.end+1
가 되니 갱신해준다.2
번을 끝냈는데도 계산해야 할 아파트들이 남아있다면(맨 뒷 부분) 한 번 더 계산해준다.(문제의 두번째 예와 같이)if(idx<=n)
으로 체크하는데, 현재 체크하는 아파트가 아파트의 개수보다 작거나 같으면임cnt
를 구해서 2-2
와 같게 계산한다.#include <iostream>
#include <vector>
using namespace std;
int solution(int n, vector<int> stations, int w)
{
int answer = 0;
int idx = 1;
for(int i=0;i<stations.size();i++)
{
int stt = stations[i]-w;
int end = stations[i]+w;
if(idx<stt)
{
int cnt = stt-idx;
if(cnt%(w*2+1)==0) answer += cnt/(w*2+1);
else answer += cnt/(w*2+1) + 1;
}
idx = end+1;
}
if(idx<=n)
{
int cnt = n-idx+1;
if(cnt%(w*2+1)==0) answer += cnt/(w*2+1);
else answer += cnt/(w*2+1) + 1;
}
return answer;
}