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;
}