프린터
URL :https://programmers.co.kr/learn/courses/30/lessons/42587#qna
프린터에 인쇄 요청이 오는데 우선순위(Prioirties)에 따라서 인쇄 순서를 처리한다.
그 과정에서 내가 넣은 데이터(location)가 몇 번째로 인쇄가 되는지 리턴하는 문제이다.
public int Solution(int[] priorities, int location) {
int answer = 0;
Queue<KeyValuePair<int, int>> queueData = new Queue<KeyValuePair<int, int>>();
for (int i = 0; i < priorities.Length; i++)
{
queueData.Enqueue(new KeyValuePair<int, int>(i, priorities[i]));
}
while (true)
{
int max = queueData.Max(x => x.Value);
KeyValuePair<int,int> current = queueData.Dequeue();
if (current.Value == max)
{
if (current.Key == location)
return answer + 1;
else
{
answer++;
continue;
}
}
queueData.Enqueue(current);
}
}
역시나 처리하는 과정에서 문제를 풀이하고 이해하는 과정이 쫌 많이 고생했다.
단순하게 우선순위 큐를 이용해서 구현을 했는데 location값이 0이 들어가는 순간 왜 리턴 값이 저런 식으로 나와야 하는지에 대해 고민을 엄청 했다. 결론은 큐를 소진하고 리턴되는 데이터를 처리하면 되는 것이었다.
우선순위 큐(Prioirty Queue)
★★☆☆☆
반응형
댓글