알고리즘 공부 및 문제 풀이/프로그래머스(PRO)
[pro] 프로그래머스 level3 12979 기지국 설치 (Java) - 그리디
yoonjiy
2023. 1. 26. 17:57
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/12979
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[풀이]
1동부터 n동까지 돌며 그리디하게 기지국을 설치한다.
만약 이미 설치된 기지국 범위 안에 있다면 기지국을 새로 설치할 필요가 없다. 따라서 기지국의 오른쪽 끝 범위 + 1 위치로 이동한다.
만약 설치된 기지국 범위 안에 없다면 새로 기지국을 설치해야 한다. 따라서 설치개수를 증가시켜 주고 새로 설치한 기지국의 전파 범위 다음 위치로 이동시켜줘야 한다. 이때 범위는 (왼쪽으로 w 범위 + 오른쪽으로 w 범위 + 설치되는 곳 1) 이 된다.
[코드]
class Solution {
public int solution(int n, int[] stations, int w) {
int answer = 0;
//증설해야 할 기지국 개수의 최솟값을 리턴
int idx = 0;
int pos = 1;
while(pos<=n){
//이미 설치된 기지국 범위 안에 있으면
if(idx<stations.length && stations[idx]-w <= pos){
//기지국 오른쪽 끝 + 1 위치로 이동
pos = stations[idx]+w+1;
idx++;
}
else{
answer++; //기지국 설치
pos += 2*w+1;
}
}
return answer;
}
}