[プログラマー]もっと辛い(Java)
11124 ワード
🔗 質問リンク
https://programmers.co.kr/learn/courses/30/lessons/42626
👨🏻💻 初回作成コード(実行時エラー)
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
int temp1;
int temp2;
List<Integer> list = new LinkedList<>();
for (int i: scoville)
list.add(i);
Collections.sort(list);
while ((list.get(0) < K) || (list.get(1) < K)) {
temp1 = list.remove(0);
temp2 = list.remove(0);
list.add(0, temp1 + (temp2*2));
answer++;
}
if(list.get(0) < K)
return -1;
return answer;
}
}
👨🏻💻 PriorityQueueで作成されたコード
import java.util.*;
class Solution {
public int solution(int[] scoville, int K) {
int answer = 0;
int temp1;
int temp2;
PriorityQueue<Integer> queue = new PriorityQueue<>();
for (int i: scoville)
queue.offer(i);
while (queue.peek() < K) {
if (queue.size() == 1) return -1;
temp1 = queue.poll();
temp2 = queue.poll();
queue.offer(temp1 + (temp2*2));
answer++;
}
if(queue.peek() < K)
return -1;
return answer;
}
}
📝 n/a.結論
この問題はheapを用いて解決した問題である.
最初はLinkedList classを使用して問題を解決しようとしたが、論理は正しいが、コード効率が低下したため、採点時にすべての問題にランタイムエラーが発生した.
そこで,実行時間を短縮するために,heap構造の自動ソートとして内部構造を用いたPriorityQueueを用いて問題を解決する.
PriorityQueueの内部構造はHeap構造で構成されているため,時間的複雑度はO(NLOGN)であり,今回の問題と同様にHeapを用いて解決する必要がある問題に非常に適している.
Reference
この問題について([プログラマー]もっと辛い(Java)), 我々は、より多くの情報をここで見つけました https://velog.io/@seongwon97/프로그래머스-더-맵게-Javaテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol