[プログラマー]もっと辛い


こんにちは。


MINDOLです
今日の問題は、優先キューを使用する問題です.
優先順位キューを使用しないで実装できますが、効率テストでエラーが発生します.
(優先順位キューがよくわかりませんが、効率テストで2時間考えました...)
優先順位列がわからない場合は、タイトルのように辛い質問です.
では、直接問題を見てみましょう.
質問リンク

もっと辛い



すべての食べ物のスコヴェル指数をK以上にするために、規定の方法で食べ物を使用します.また、書き込み回数を返さなければなりません.
ただし、Kより大きい値に一致しない場合は、-1を返します.
  • は、まず優先キューを作成します.
  • は2つの要素を抽出し、抽出された要素がKより大きいまで
  • を抽出する.
  • 式で混ぜ合わせて入れ直し、数を数えるだけでOKです.
  • ではjavaコードを見てみましょうか?
    import java.util.PriorityQueue;
    
    class Solution {
    	public int solution(int[] scoville, int K) {
    		int cnt = 0;	// 횟수 변수
    		int mix = 0;	// 섞인 음식
    		PriorityQueue<Integer> heap = new PriorityQueue<Integer>();
    		for (int i=0; i < scoville.length; i++)	// 힙에 값 대입
    			heap.add(scoville[i]);		
    		for (int x, y; heap.size() > 1;) {	// 요소는 한개는 남깁니다.
    			x = heap.poll();
    			if (x >= K)		// 최소값이 K이상이면 멈춤
    				break;
    			y = heap.poll();
    			mix = x + (y * 2);
    			heap.add(mix);	// 섞어서 다시 넣음
    			cnt++;		// 횟수 카운트
    		}
    		if (heap.poll() < K)	// 마지막으로 뽑은 요소가 K미만이면
    			return (-1);
    		return (cnt);
    	}
    }
    繰り返し文の終了後に要素を選択した場合、値がKより大きい場合、cntでカウントされた値が返されます.
    しかし、Kより低い場合、すべての食品が混合された後、Kを超えないため、−1に戻る.
    優先キューというデータ構造を理解していない場合は、この問題を解決するのは難しいです.
    この問題で優先順位キューを習得しました:)
    では.

    皆さん、こんにちは