[프로그래머스] 프린터

2020. 3. 27. 14:48프로그래머스/LEVEL 2

import java.util.*;

class Solution {
    public int solution(int[] priorities, int location) {
        int answer = 0;
        PriorityQueue<Integer> temp = new PriorityQueue<>(Collections.reverseOrder());
        
        for(int i=0; i<priorities.length; i++){
            temp.offer(priorities[i]);
        }
        
        while(!temp.isEmpty()){
            for(int i=0; i<priorities.length; i++){
                if(temp.peek()==priorities[i]){
                    temp.poll();
                    answer ++;
                    if(i==location){
                        temp.clear();
                        break;
                    }
                }
            }
        }
        
        return answer;
    }
}

PriorityQueue의 메소드

1. offer,add : 값을 넣어준다.

2. peek : 우선순위가 가장 높은 것을 반환해준다.  Collections.reverseOrder()를 통해 값이 큰 것이 높은 우선순위를 갖는다.

3. poll :  우선순위가 높은것을 제거한다.

4. isEmpth : 큐가 비었는지 확인해준다. 

 

 

import java.util.*;

class Solution {
    class document {
        int turn;
        int priority;
        
        document(int turn, int priority) {
            this.turn = turn;
            this.priority = priority;
        }
    }
    
    public int solution(int[] priorities, int location) {
        int answer = 0;
        
        List<document> documents = new ArrayList<>();
        
        for(int i=0; i<priorities.length; i++){
            documents.add(new document(i,priorities[i]));
        }
        
        while(true){
            if(isCorrectPriority(documents)){
                answer ++;
                if(documents.get(0).turn == location){
                break;
                }
                documents.remove(0);
            } else {
                documents.add(new document(documents.get(0).turn,documents.get(0).priority));
                documents.remove(0);
            }
        }
        
        return answer;
    }
    
    private boolean isCorrectPriority(List<document> documents){
        for(int i=1; i<documents.size(); i++){
            if(documents.get(0).priority<documents.get(i).priority){
                return false;
            }
        }
        return true;
    }
    
}

두번째 풀때는, 순서와 우선순위가 함께 담긴 class를 만들어서 풀었다.

우선순위큐가 떠오르지 않아서였다.

우선순위 큐의 활용법을 제대로 알아야겠다.