티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/42587?language=java

 

코딩테스트 연습 - 프린터 | 프로그래머스

일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에

programmers.co.kr

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
class Solution {
    public int solution(int[] priorities, int location) {
       int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
 
        for(int priority : priorities) {
            pq.offer(priority);
        }
 
        while(!pq.isEmpty()) {
 
            for(int i = 0; i < priorities.length; i++) {
                if(pq.peek() == priorities[i]) {
                    pq.poll();
                    answer++;
                    if (location == i) {
                        pq.clear();
                        break;
                    }
                }
            }
        }
 
        return answer;
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

 

자바에서 제공하는 우선순위 큐(Priority Queue) 유틸은 힙 기반으로 만들어졌다.

그래서 최대힙, 최소힙을 활용 가능해서 알고리즘 문제에서 종종 눈에 띄곤한다.

처음엔 큐(Queue)를 사용해서 처음부터 확인하고 다시 맨 뒤로 넣고 확인하고 아니면 뒤로...

이런식으로 정말 문제 그대로 만들려다보니 점점 미궁에 미궁에 미궁으로 빠졌다.

간단하게 우선순위 큐에서 높은 우선 순위가 있으면 출력하고 갯수 체크만 하면 끝인걸...

ps. Priority Queue는 그냥 만들면 최소값 기준으로 우선순위 된다.

new Priority Queue(Collections.reverseOrder())로 생성해주게 되면 최대값 기준으로 우선순위가 정렬된다.

댓글