개발 🛠💻/코딩테스트 & 알고리즘

C++ 프로그래머스 코딩테스트 - 기지국 설치 (12979)

승지 T-Story 2022. 7. 21. 14:02

기지국 설치

Level 3

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

기지국을 추가 설치해서 모든 아파트에 전달해야한다.

 

 

 

 

기지국을 최소로 설치하면서 모든 아파트에 전파를 전달한다.

위의 예시에서는 최소 3개를 설치하면 모든 아파트에 전달 가능하다.

 

 

 

나의 풀이

int solution(int n, vector<int> stations, int w)
{
	int answer = 0;
	int lastRightIdx = 0;

	for (int appart : stations)
	{
		int leftIdx = appart - w - 1;
		if (leftIdx > lastRightIdx)
		{
			leftIdx -= lastRightIdx;
			int need_5G_cnt = leftIdx / (w * 2 + 1);
			if (leftIdx % (w * 2 + 1) != 0)
				need_5G_cnt += 1;
			answer += need_5G_cnt;
		}
		lastRightIdx = appart + w ;
	}
	if (n > lastRightIdx)
	{
		n -= lastRightIdx;
		int need_5G_cnt = n / (w * 2 + 1);
		if (n % (w * 2 + 1) != 0)
			need_5G_cnt += 1;
		answer += need_5G_cnt;
	}
	return answer;
}

 

 

 

풀이 요점

처음에는 0 ~ 아파트 개수 만큼 for문을 돌았는데, 효율성 체크에서 통과하지 못했다. O(N) = 아파트 개수

그래서 stations 를 for문을 돌도록 변경했다. O(N) = 현재 기지국 개수 (stations 개수)