본문 바로가기
코테준비/하루한개도전~

프로그래머스 : 기지국 설치

by 움바둠바 2024. 8. 30.
728x90

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;
}
728x90