
이 문제는 전형적인 서버의 유지 시간과 선입 선출을 다룬 문제로, 선입 선출의 구조를 보자말자 바로 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;
}'C# > 알고리즘 문제 풀기' 카테고리의 다른 글
| 프로그래머스 - 영어 끝말잇기 (1) | 2025.08.20 |
|---|---|
| 프로그래머스 - 호텔 대실 (1) | 2025.08.10 |
| 프로그래머스 - 숫자 카드 나누기 (0) | 2025.08.02 |
| 프로그래머스 - 큰 수 만들기 (문자열 그리디) (0) | 2025.08.01 |
| 프로그래머스 - 마법의 엘리베이터 (0) | 2025.07.31 |