もっと辛い(ヒップホップ、優先順位キュー)-PYTHON
2496 ワード
問題の説明
辛いのが好きなLeoは全ての食べ物のScobile指数をK以上にしたいすべての食べ物のScobile指数がK以上になるように、LeoはScobile指数が最も低い2つの食べ物を以下のような特殊な方法で混合し、新しい食べ物を作った.
混合食品のスコヴェル指数=最も辛くない食品のスコヴェル指数+(第2の辛くない食品のスコヴェル指数*2)
Leoは、すべての食べ物のスコビル指数がK以上になるまでかき混ぜます.
Leoが持つ食べ物のスコヴェル指数とScoville指数がKに達したとき、すべての食べ物のスコヴェル指数をK以上に混合する最小回数を返す解関数を作成してください.
せいげんじょうけん
スコビルの長さは2以上1000000以下です.
Kは0より大きく、10000000より小さい.
scovilleの各要素は0または10万以下です.
すべての食べ物のスコビル指数をKより大きくすることができない場合は、−1を返す.
I/O例
scoville K return
[1, 2, 3, 9, 10, 12] 7 2
解法
まず,再帰関数を用いて解決する方法を採用した.
1入力されたリスト要素がkより小さいかどうかを確認する
2 sort後arr[0]+arr[1]*2に混合
3混合元素+arr[2:]
4 cnt + 1
5繰り返し
def shake (arr,k,cnt) :
if len([a for a in arr if a < k]) == 0:
return cnt
cnt += 1
arr.sort()
shaked = [arr[0] + arr[1]*2] + arr[2:]
return shake (shaked,k,cnt)
def solution(scoville, K):
answer = 0
new_scoville = [i for i in scoville if i < K]
answer = shake(new_scoville, K,0)
return answer
ただし、値は良好ですが、実行時にエラーや効率の問題が発生した場合はエラーです...結果が出た.😢だから、もっと効果的な資料型を考えて、最も辛くない2番目の問題「辛味」を見て、順番が最も重要で、ソートがsortより速い構造は何ですか?思い出した.
そして、教室で優先順位キューがsortライブラリより速いと聞いたのを覚えています.
今すぐ検索を開始...
c++と同様に、優先度Q Pythonもラッキーにライブラリを提供してくれました!( heapqの詳細 )
heapqは他の言語のモジュールとは違って、とても感謝しているやつで、push、popなら自動的にソートされます.👍 (名前のようにオシャレな...やつ...🤘🖖)
だからアルゴリズムを再整理すると
3-1. お尻が一番小さく、2番目の小さな要素が混ざっています.
3-2. cnt +1
import heapq
def solution(scoville, K):
p_qeue = []
cnt = 0
for num in scoville :
heapq.heappush(p_qeue,num)
while p_qeue[0] < K :
try:
heapq.heappush(p_qeue, heapq.heappop(p_qeue) + heapq.heappop(p_qeue) * 2)
except IndexError:
return -1
cnt += 1
return cnt
Reference
この問題について(もっと辛い(ヒップホップ、優先順位キュー)-PYTHON), 我々は、より多くの情報をここで見つけました https://velog.io/@j_user0719/더-맵게-힙-우선순위-큐-PYTHONテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol