プログラマ
5043 ワード
質問する
問題の説明
デュアル・ユーティリティ・プリアンブル・キューとは、次の演算が可能なデータ構造です.
パラメータとして2つの優先順位キューで実行する演算操作を指定した場合、すべての演算を処理した後、キューが空の場合[0,0]空でない場合、「最値、最上昇値」を返すソルバを実装します.
せいげんじょうけん
要素はコマンドデータ形式で与えられます.最大値/最大値を削除する操作で複数の最大値/最大値がある場合は、1つだけ削除します.
にゅうしゅつりょく
I/O例
I/O例説明
16を挿入すると、最大値が削除されます.[0,0]を返します.空ですから.
7、5、および-5を挿入して、最大値を削除します.最大値7、最小値5を返します.
コミットコード
import heapq
def solution(operations):
answer = []
q = []
for operation in operations:
o, num = operation.split()
# I일 경우 num 삽입
if o == "I":
# num을 int로 바꾸지 않으면 음수에 대한 처리가 안됨.
heapq.heappush(q, int(num))
continue
if q:
# 최소 힙으로 heappop 하면 됨.
if num == "-1":
heapq.heappop(q)
# q를 정렬하고 마지막 값을 제거했는데, 사실 이렇게 안하고 q.remove(max(q))이렇게 해줘도 됨.
else:
q.sort()
q = q[:-1]
# 해당 배열을 heapify해줌.
heapq.heapify(q)
if q:
m_in = heapq.heappop(q)
if q:
m_ax = max(q)
answer = [m_ax, m_in]
# q에 값이 하나밖에 없던 상황, 최댓값과 최솟값이 같은 상황으로 다음과 같이 처리한다.
else:
answer = [m_in, m_in]
else:
answer = [0, 0]
return answer
Reference
この問題について(プログラマ), 我々は、より多くの情報をここで見つけました https://velog.io/@nayoon-kim/프로그래머스-이중우선순위큐テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol