본문 바로가기
개발/문제풀이

문제풀이)프로그래머스) 프린터

by 테샤르 2020. 8. 20.

프린터

URL :https://programmers.co.kr/learn/courses/30/lessons/42587#qna

 

코딩테스트 연습 - 프린터

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린��

programmers.co.kr

프린터에 인쇄 요청이 오는데 우선순위(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)

 

 

 

반응형

댓글