プログラマデュアル優先キュー
にじゅうゆうせんれつ
問題の説明
デュアル・ユーティリティ・プリアンブル・キューとは、次の演算が可能なデータ構造です.
コマンド受信タワー(高さ)Iのデジタルキューに指定した数字を挿入します.D 1キューから最値を削除します.D-1キューから最大値を削除します.
パラメータとして2つの優先順位キューで実行する演算操作を指定した場合、すべての演算を処理した後、キューが空の場合[0,0]空でない場合、「最値、最上昇値」を返すソルバを実装します.
せいげんじょうけん操作は、100000より長い文字列配列である. 操作の要素は、キューが実行する操作を表す.
要素はコマンドデータ形式で与えられます.最大値/最大値を削除する操作で複数の最大値/最大値がある場合は、1つだけ削除します. 空のキューでデータの削除が要求された場合、この操作は無視されます. I/O例
operationsreturn["I 16","D 1"][0,0]["I 7","I 5","I -5","D -1"][7,5]
I/O例説明
16を挿入すると、最大値が削除されます.[0,0]を返します.空ですから.
7、5、および-5を挿入して、最大値を削除します.最大値7、最小値5を返します.
concept
just do it .. 要求通りに記入すればいいです.
code
にじゅうゆうせんれつ
#heapから最大数を削除...->heap.pop()でも...
Pythonは本当に自分でスタック構造を整理しているようです...△この部分については、後で詳しく説明します.
問題の説明
デュアル・ユーティリティ・プリアンブル・キューとは、次の演算が可能なデータ構造です.
コマンド受信タワー(高さ)Iのデジタルキューに指定した数字を挿入します.D 1キューから最値を削除します.D-1キューから最大値を削除します.
パラメータとして2つの優先順位キューで実行する演算操作を指定した場合、すべての演算を処理した後、キューが空の場合[0,0]空でない場合、「最値、最上昇値」を返すソルバを実装します.
せいげんじょうけん
要素はコマンドデータ形式で与えられます.最大値/最大値を削除する操作で複数の最大値/最大値がある場合は、1つだけ削除します.
operationsreturn["I 16","D 1"][0,0]["I 7","I 5","I -5","D -1"][7,5]
I/O例説明
16を挿入すると、最大値が削除されます.[0,0]を返します.空ですから.
7、5、および-5を挿入して、最大値を削除します.最大値7、最小値5を返します.
concept
just do it .. 要求通りに記入すればいいです.
code
にじゅうゆうせんれつ
import heapq
def solution(operations):
answer = []
heap = []
for i in operations:
#명령어 I 처리
if i[0] == 'I':
heapq.heappush(heap, int(i[2:]))
#명령어 D 처리
else:
if len(heap)==0:
continue
elif i[2] == '-':
heapq.heappop(heap)
else:
#heap에서 가장 큰 수 제거
#heapq.nlargest(n, list) 함수를 사용하면 list에서 가장 큰 n개의 수를 뽑아 낼 수 있다. 위 코드에서 heap 의 원소 개수만큼 뽑아 내기 때문에 heap 리스트는 내림 차순으로 정렬이 되어 있는 상태이다. 이 상태에서 1부터 슬라이싱을 하면 가장 큰 최대값이 제외될 것이고, 다시 최소힙으로 만들어주면 된다.
heap = heapq.nlargest(len(heap),heap)[1:]
#다시 힙정렬
heapq.heapify(heap)
if heap:
answer.append(max(heap))
answer.append(min(heap))
else:
answer.append(0)
answer.append(0)
return answer
import heapq
def solution(operations):
answer = []
heap = []
for op in operations:
if(op[0] == 'I'):
heapq.heappush(heap,int(op[2:]))
else:
if(len(heap) == 0):
continue
elif(op[2] == '-'):
heapq.heappop(heap)
else:
heap.pop()
if(heap):
answer.append(max(heap))
answer.append(min(heap))
else:
return [0,0]
return answer
リファレンス#heapから最大数を削除...->heap.pop()でも...
Pythonは本当に自分でスタック構造を整理しているようです...△この部分については、後で詳しく説明します.
Reference
この問題について(プログラマデュアル優先キュー), 我々は、より多くの情報をここで見つけました https://velog.io/@yoon_s_whan/프로그래머스이중-우선순위-큐テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol