프로그래머스/2레벨
[프로그래머스 2레벨] 서버 증설 횟수 (C++)
게임개발기원
2025. 2. 27. 19:57
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> players, int m, int k) {
int answer = 0;
queue<int> q;
for (int i = 0; i < players.size(); i++)
{
while (!q.empty() && q.front() <= i) q.pop(); //유효 하지 않은 서버 삭제
int need_server = players[i]/m; //필요한 서버 수
int operate_server = q.size(); //작동 중인 서버 수
if(operate_server < need_server)
{
int add_server = need_server - operate_server; //추가해야 하는 서버 수
answer += add_server;
for(int j=0; j<add_server; j++) q.push(i+k); //종료시간 기록
}
}
return answer;
}
queue를 활용해 풀 수 있는 문제이다.
우선 현재 플레이어 수와 m 값 기준으로 필요한 서버 수를 계산해준다.
그리고 해당 문제에서 queue에 서버 수를 담아줄 것이므로 queue의 사이즈는 작동 중인 서버 수가 될 것이다.
이제 운영중인 서버수와 필요한 서버 수의 차이를 구해 추가해야할 서버 수가 몇개인지 구해주고, 이를 answer에 누적하여 더해준다.
이제 추가된 서버 수 만큼 해당 서버의 종료시간을 queue에 넣어주자.
매 반복문마다 처음에 해당 queue에서 유효하지 않은 서버를 탐색하고 이를 삭제하게 된다.
queue에는 종료 시간을 넣었기에, 해당 값이 i보다 작거나 같다면 진작에 서버가 종료되었거나 이제 끝난 케이스이기에 해당 서버 값을 삭제해주면 된다.
이를 player.size() 만큼 만복하여 누적하여 더해진 추가 서버수를 반환하게 된다.