티스토리 뷰

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

 

코딩테스트 연습 - 프린터

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

programmers.co.kr

풀이법:

1) 우선순위 큐를 사용해서 가장 중요도가 높은 문서를 항상 알 수 있도록 한다.

2) 대기목록의 문서들을 순차적으로 확인하면서 중요도 비교하고 일치할 경우엔 pop하고 1씩 더한다.

3) 찾는 location이 일치하면 바로 답을 반환한다.

 

Comment:

1) 문제 좀 잘 읽자..

2) ArrayList vs 배열에서 성능 차이는 얼마만큼 날까? 코테에서 시간차이가 의미있는 수준으로 날까?

 

import java.util.*;

class Element{
    int priority;
    int location;
    
    public Element(int priority, int location){
        this.priority = priority;
        this.location = location;
    }
}

class Solution {
    public int solution(int[] priorities, int location) {

        PriorityQueue <Integer> pq = new PriorityQueue(Collections.reverseOrder());
        ArrayList<Element> list = new ArrayList();
        
        
        for(int i = 0 ; i < priorities.length; i++){
            Element el = new Element(priorities[i], i);
            pq.add(priorities[i]);
            list.add(el);
        }
        
        int count = 0;
        while(!list.isEmpty() && !pq.isEmpty()){
            if(list.get(0).priority < pq.peek()){
                
                Element temp = list.get(0);
                list.remove(0);
                list.add(list.size(), temp);
            }else{
                pq.poll();
                count++;
                if(list.get(0).location == location){
                    return (count);
                }
                list.remove(0);
            }
        }
        return 0;
    }
}