반응형
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
N개의 아파트와 stations 만큼의 4G 기지국이 있을 때 4G 기지국을 5G로 바꾸려고 합니다.
5G는 4G보다 범위가 적기 때문에 기지국을 추가로 설치해야합니다.
모든 아파트에서 인터넷을 쓰려면 최소 몇개의 기지국을 추가로 설치해야하는지 찾아주세요
풀이 방법
인터넷이 닿지 않는 공간을 계산하면 간단합니다.
// 1 ~ 11
[] [] [] [O] [] [] [] [] [] [] [O]
위와 같이 4번, 11번에 기지국이 설치되어 있고 인터넷 범위가 1이라면
인터넷이 닿지 않는 공간은 아래의 빈칸 입니다. ( O는 인터넷 가능 범위)
[] [] [O] [O] [O] [] [] [] [] [O] [O]
첫 번째 빈칸은 2개, 기지국 1개로 커버가 가능합니다.
두 번째 빈칸은 4개, 기지국 2개로 커버가 가능합니다.
즉, 추가로 필요한 기지국은 3개
인터넷 범위가 2일 때을 보겠습니다.
[] [O] [O] [O] [O] [O] [] [] [O] [O] [O]
첫 번째 빈칸은 1개, 기지국 1개를 필요로 합니다.
두 번째 빈칸은 2개, 기지국 1개를 필요로 합니다.
즉 추가로 필요한 기지국은 2개입니다.
코드로 표현해보자면
int GetCost(int length, int w)
{
int ret = length / (w * 2 + 1);
ret += length % (w * 2 + 1) > 0 ? 1 : 0;
return ret;
}
위 계산식으로 길이당 필요 기지국을 구할 수 있겠습니다.
정답 코드
#include <iostream>
#include <vector>
using namespace std;
int GetCost(int length, int w)
{
int ret = length / (w * 2 + 1);
ret += length % (w * 2 + 1) > 0 ? 1 : 0;
return ret;
}
int solution(int n, vector<int> stations, int w)
{
int answer = GetCost((stations[0] - w) - 1, w);
for (int i = 1; i < stations.size(); i++)
{
int left = stations[i - 1] + w + 1;
int right = stations[i] - w - 1;
// left -> 6, right -> 9일 때 길이는 4
int length = right - left + 1;
answer += GetCost(length, w);
}
answer += GetCost(n - (stations[stations.size() - 1] + w), w);
return answer;
}
반응형
LIST
'알고리즘 문제 > 프로그래머스' 카테고리의 다른 글
섬 연결하기 [Lv. 3] (1) | 2024.09.18 |
---|---|
징검다리 건너기 [Lv. 3] (0) | 2024.09.17 |
숫자 게임[Lv. 3] (0) | 2024.08.03 |
최고의 집합 [Lv. 3] (C++) (0) | 2024.08.03 |
이중우선순위큐 [Lv. 3] (0) | 2024.07.23 |