알고리즘/PS - 프로그래머스

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

excited-hyun 2021. 8. 2. 17:56
반응형

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

 

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

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

programmers.co.kr

 

풀이

이 문제는 재귀를 사용해서 풀이하였습니다.

우선 이미 있는 기지국을 가지고 전파가 전달되지 않는 구간들만 찾아서 해당 구간들에 대해 sol()함수를 호출합니다.

sol()함수 내에서는 하나의 기지국을 앞에서 부터 설치하고 뒤에 아직도 전파 전달이 되지 않는 구간이 있을 경우 그 구간에 대해 sol()함수를 다시 호출합니다.

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int cnt = 0;

void sol(int start, int last, int w){
    cnt++;
    if(last - start > w*2){
        start = start+w*2+1;
        sol(start, last, w);
    }
}

int solution(int n, vector<int> stations, int w)
{
    int answer = 0;
    sort(stations.begin(), stations.end());
    int start = 1, last = 1;

    int sSize = stations.size();
    for(int i=0; i<sSize; i++){
        if(i==0){
            start = 1;
            last = stations[i]-w-1;
            if(start>last)
                continue;
            sol(start, last, w);
        }
        else {
            start = stations[i-1]+w+1;
            last = stations[i]-w-1;
            if(start>last)
                continue;
            sol(start, last, w);
            
        }
    }
    //마지막
    start = stations[sSize-1]+w+1;
    last = n;
    if(start<=last)
        sol(start, last, w);
    
    answer = cnt;

    return answer;
}
728x90
반응형