문제 풀이/문제 풀이(프로그래머스)
2025 프로그래머스 코드챌린지 2차 예선 > 서버 증설 횟수
풀뿌리
2025. 4. 11. 13:44
문제 위치 : https://school.programmers.co.kr/learn/courses/30/lessons/389479
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이 문제는 항상 최선의 수를 계산하는 그리디 기법으로 풀었다.
시간대별로 유저수를 탐색하다가 서버가 더 필요한 경우 최소한 만큼 서버를 증설하는 것이다.
아래 코드의 주석대로 서버를 증설할 경우 answer와 current_server에 가산하여 전체 증설 횟수와 각 시간별 서버 갯수를 독립적으로 관리한다.
또한, 해당 시간대에 소멸된 서버 갯수를 벡터를 통해 k개 후의 위치에 반영할 수 있도로 하였다.
#include <string>
#include <vector>
using namespace std;
int solution(vector<int> players, int m, int k) {
int answer = 0;
int curr_server = 0;
vector<int> servers(30,0);
for(int i = 0; i < 24; i++){
//서버 수와 유저 수 비교
//서버 증설 할 때 answer 추가, 현재 서버 갯수 추가, 미래에 지울 서버 반영
curr_server += servers[i];
int capacity = (curr_server+1) * m - 1;
if(capacity < players[i]){
int gap = players[i]-capacity;
int need_more = gap/m;
if(need_more==0||gap%m>0) need_more++;
answer += need_more;
curr_server += need_more;
servers[i+k] -= need_more;
}
}
return answer;
}