https://school.programmers.co.kr/learn/courses/30/lessons/12979
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
생각보다 간단했다!
하나의 기지국이 얼만큼을 cover할 수 있는지를 생각한 다음, 빈칸에 적절히 넣어주면 된다.
이건 시뮬레이션 할게 아니라, 그냥 계산만으로 해결할 수 있는데..
만약 전파가 전혀 도달하지 않는 아파트가 연속해서 7개 있다고 했을 때
w가 2면, 기지국 하나가 cover할 수 있는 아파트의 개수는 5개가 된다.
즉 연속된 아파트 7개에는 기지국이 총 2개가 필요하다.
==> ceil(연속된 아파트 개수 / cover) 이렇게 계산해준다!
* ceil : 올림 (cmath)
* floor : 내림 (cmath)
전파가 도달하지 않는, 연속된 아파트의 개수는 주어진 stations 배열의 연속된 값을 단순히 빼주기만 하면 된다.
(이 때 w도 같이 빼줘야 한다! w만큼은 전파가 도달하는거니까)
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int solution(int n, vector<int> stations, int w)
{
int answer = 0;
float cover = (w * 2) + 1;
int pre = stations[0];
answer += (int)ceil((float)(stations[0] - 1 - w) / cover);
for(int i = 1; i<stations.size(); i++){
answer += (int)ceil((float)(stations[i] - pre - 1 - (2*w))/cover);
pre = stations[i];
}
answer += (int)ceil((float)( n - stations[stations.size()-1]- w) / cover);
return answer;
}
프로그래머스 : 스티커 모으기(2) (0) | 2024.08.30 |
---|---|
프로그래머스 : 해시 - 베스트앨범 (0) | 2024.08.30 |
백준 : 14501 - 퇴사 (0) | 2024.08.29 |
프로그래머스 : 그리디 - 단속카메라 (0) | 2024.08.29 |
프로그래머스 : 최고의 집합 (0) | 2024.08.29 |