[アルゴリズム]プログラマー-もっと辛い(Heap)
7769 ワード
1.質問
辛いのが好きなLeoは全ての食べ物のScobile指数をK以上にしたいすべての食べ物のScobile指数がK以上になるように、LeoはScobile指数が最も低い2つの食べ物を以下のような特殊な方法で混合し、新しい食べ物を作った.
混合食品のスコヴェル指数=最も辛くない食品のスコヴェル指数+(第2の辛くない食品のスコヴェル指数*2)
Leoは、すべての食べ物のスコビル指数がK以上になるまでかき混ぜます.
Leoが持つ食べ物のスコヴェル指数とScoville指数がKに達したとき、すべての食べ物のスコヴェル指数をK以上に混合する最小回数を返す解関数を作成してください.
2.制限
3.解答
-前の最小のスコビル指数は
(優先キューであるため自動ソート)
->ループごとに回答を増やす+->回数
4.コード
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.PriorityQueue;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
//모든 원소가 K이상인지 확인하기 용
int check = 0;
//새로 계산한 스코빌
int ms=0;
//가장 작은 스코빌
int ls = 0;
//두번쨰로 작은 스코빌
int tls = 0;
PriorityQueue<Integer> list = new PriorityQueue<>();
for(int tmp : scoville) {
list.add(tmp);
}
while(true) {
check = 0;
if(list.peek()>K) {
break;
}
else if(list.size()==1 && list.peek()<K) {
answer = -1;
break;
}
ls = list.poll();
tls = list.poll();
ms = ls+ (2*tls);
list.add(ms);
answer++;
}
return answer;
}
}
Reference
この問題について([アルゴリズム]プログラマー-もっと辛い(Heap)), 我々は、より多くの情報をここで見つけました https://velog.io/@yeju6540/알고리즘-프로그래머스-더-맵게Heapテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol