본문 바로가기
코딩테스트/프로그래머스

[스택/큐] 프린터 - JAVA

by 의정부핵꿀밤 2022. 4. 25.
728x90

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr


내가 사용한 자료구조 순서는 이랬따

배열 -> arrayList -> class를 이용한 queue -> priority queue

 

인덱스랑 우선순위를 저장하는 클래스를 만들어서 큐에 담고, 그걸로 구현하려고 했는데 그러자니 최댓값을 계속 구해오는게 좀 걸리는겨..

 

그래서 찾아보다 앗! 한게 우선순위 큐 였다!

우선순위 큐에 priority 저장하고 계속 꺼내면서 하면 되니까 그렇게 구현했어

사실 내 힘으로 온전히 구현한건 아니지만 일단 코드!

import java.util.*;
class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); //maxHeap 사용
        
        for(int i=0;i<priorities.length;i++) {
            pq.add(priorities[i]);
        }
        
        while(!pq.isEmpty()) {
            for(int i=0;i<priorities.length;i++) {
                if(pq.peek() == priorities[i]) {
                    pq.poll();
                    answer++;
                    
                    if(i==location) {
                        return answer;
                    }
                }
            }
        }
        
        return answer;
    }
}

코드 간단하지?

우선순위 큐 선언할때 Collections.reverseOrder() 사용해서 maxHeap으로 만들어줬어

우선순위 큐는 기본으로 minHeap이거든~

 

암튼 그렇게 해서 우선순위 기준으로 반복문 돌면서 최댓값이면 꺼내고 answer 더하고 이런식으로 했엉!

쉬운데 왜 혼자 못풀까... 꾸준히좀 하자 야미야..ㅠㅠ

 

암턴 빠잉!

728x90

댓글