C#/알고리즘 문제 풀기
프로그래머스 - 서버 증설 횟수
Toa_
2025. 8. 3. 16:52

이 문제는 전형적인 서버의 유지 시간과 선입 선출을 다룬 문제로, 선입 선출의 구조를 보자말자 바로 Queue가 떠올랐다.
이후 자세히 살펴 보니 Queue에 넣을때는 하나의 값으로만 간단한 구조로 넣을 수 있기에, 방금 넣은 Queue의 서버 유지시간을 저장할 방법을 생각 해 보았고.
만약 매 순간 Queue<int>에 추가 서버를 넣되, 만약 서버를 추가하지 않아도 되는 상황에는 0 을 넣어 매 순간의 서버 추가를 Queue로 관리하여, 최초 큐 입력의 시간이 서버 유지시간을 넘어가는 시점부터 매번 큐의 내용물을 빼서 연산하는 방식으로 아래와 같이 구현하였다.
public int solution(int[] players, int m, int k)
{
Queue<int> serverQ = new Queue<int>();
int currentServer = 0;
int cumuSever = 0;
for(int i = 0; i < players.Length; i++)
{
// 유지 시간 이후부터는 계속 시간 지난 서버 제거
if (i - k >= 0) currentServer -= serverQ.Dequeue();
int total = 0;
// 총 유저수가 서버의 가용량을 넘어설때
if (players[i] >= (currentServer+1) * m)
{
while (players[i] >= (currentServer + 1) * m)
{
currentServer++;
cumuSever++;
total++;
}
}
serverQ.Enqueue(total);
}
return cumuSever;
}