[プログラマ]スタック/キュープリンタ/Java


📝プリンタ


✔¥質問説明


一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリスト
  • から、先頭の文書(J)を取り出す.
  • 残りの
  • 個の印刷対象リストにJよりも重要なドキュメントがある場合は、Jを印刷対象リストの最後に配置します.
  • でなければJを印刷します.
    例えば、4つの文書(A、B、C、D)が印刷対象リストに順次存在し、重要度が2 1 3 2の場合、CD A Bの順に印刷される.
  • 私が印刷を要求したドキュメントが何回目の印刷なのか知りたいです.上記の例では、Cは1位、Aは3位である.
    ソリューション関数を作成してください.パラメータが現在のキュー・リスト内のドキュメントの重要度のソート順と、印刷を要求したドキュメントが現在のキュー・リスト内にある場所を指定した場合、印刷を要求したドキュメントの何回目の印刷かを返します.

    ✔勘定科目の制限

  • 現在の待機リストには、1つ以上の100個のドキュメントが含まれています.
  • 印刷ジョブの重要性は1から9で表され、数字が大きいほど重要である.
  • の位置の値は0より大きく(現在のキューリストのタスク数-1)、キューリストの先頭に0、2番目の位置に1と表示されます.
  • 勘定科目勘定科目I/Oの例


    prioritieslocationreturn[2, 1, 3, 2]21[1, 1, 9, 1, 1, 1]05

    勘定科目勘定科目I/Oの例説明


    例1
    問題の例は次のとおりです.
    例2
    6つの文書(A、B、C、D、E、F)は、印刷対象リストにおいて、重要度が1 1 1 1 9 1 1 1 1であり、C D E F A Bの順に印刷される.

    👩🏻‍💻 풀이


    🎨キュー

    import java.util.*;
    class Solution {
        public int solution(int[] priorities, int location) {
            Queue<Pair> queue = new LinkedList<>();
            int answer = 0;
            
            for (int i = 0; i < priorities.length; i++) {
                queue.add(new Pair(i, priorities[i]));
            }
            
            while (!queue.isEmpty()) {
                
                int current = queue.peek().value;
                
                boolean flag = false;
                
                for (Pair pair : queue) {
                    if (pair.value > current) {
                        flag = true;
                        break;
                    }
                }
                
                if (flag) {
                    Pair temp = queue.poll();
                    queue.add(temp);
                }
                else {
                    answer++;
                    Pair pair = queue.poll();
                    
                    if (pair.index == location) {
                        return answer;
                    }
                }
            }
            return answer;
        }
        
        class Pair {
            int index;
            int value;
            
            public Pair(int index, int value) {
                this.index = index;
                this.value = value;
            }
        }
    }

    🎨우선순위 큐

    import java.util.*;
    class Solution {
    	public int solution(int[] priorities, int location) {
    		int answer = 1;
    		PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
    		for (int p : priorities) {
    			pq.offer(p);
    			System.out.println(pq);
    		}
    
    		while (!pq.isEmpty()) {
    			for (int i = 0; i < priorities.length; i++) {
    				if (priorities[i] == pq.peek()) {
    					if (i == location) {
    						return answer;
    					}
    					pq.poll();
    					answer++;
    				}
    			}
    		}
    
    		return answer;
    	}
    }