[プログラマー/レベル2]プリンタ(C++)
[プログラマー/レベル2]プリンタ(C++)
同じ優先度の文書が複数ある可能性があるため、同じ優先度の文書が検索する文書のインデックス(場所)と同じであることを確認する必要があります.確認するには、の優先度とインデックスを組み合わせる必要があります->pair(). 優先順位queue(優先順位キュー)を使用して、すべてのドキュメントを優先順位降順にソートします.
->この場合、ソート順は優先度基準(インデックスを考慮しない場合)の出力順です. 優先度のインデックスとそのインデックスの優先度のペア()がキューに格納されます. 優先キューが空であるか、検索するドキュメント(場所)が見つかるまで出力を繰り返します. の優先度に合致する場合(出力可能である場合)、キューから削除され、count(出力順序を検証するための変数)の数が増加します. の優先順位に合致しない場合は、キューの最後の1つに再び追加されます.
は、いずれも大きい値から並べ替えられる降順優先キュー である.
の通常のキューに要素を挿入する方法と同様の方法 優先キューの最上位要素(優先度の高い要素) を取り出す.
と宣言された場合、優先キューは昇順に並べられ、最小値から出力されます. または基本的な方法で要素をプッシュする場合は、負の値に変更することもできます.
後で追加します
後で追加します
1.質問
2.アクセス/チェックポイント
同じ優先度の文書が複数ある可能性があるため、同じ優先度の文書が検索する文書のインデックス(場所)と同じであることを確認する必要があります.確認するには、
3.解決方法
->この場合、ソート順は優先度基準(インデックスを考慮しない場合)の出力順です.
4.完全なコード
#include <vector>
#include <queue>
#include<utility> //pair() 사용
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
int count = 0;
queue<pair<int,int>> q; //priorities의 순서(idx)와 우선순위를 쌍으로 저장할 큐
priority_queue<int> pq; //우선순위에 따라 내림차순으로 저장할 우선순위 큐
//pq에 우선순위 저장(내림차순), 큐에 idx와 우선순위 순서쌍 저장
for(int i=0; i<priorities.size(); i++){
pq.push(priorities[i]);
q.push(make_pair(i,priorities[i]));
}
while(!pq.empty()){ //대기 목록이 없을 때 까지 반복
int idx = q.front().first;
int val = q.front().second;
//우선순위와 대기 순서가 일치한다면 => 출력
if(val == pq.top()){
pq.pop();
q.pop();
count++; //출력 순서 count용
if(idx == location){ //해당 문서가 내가 궁금한 인쇄물이라면
answer = count; //몇 번째 순서로 출력되는지 확인
break;
}
}else{ //우선순위가 더 높은 문서가 있다면 맨 뒤로 보내기
q.pop();
q.push(make_pair(idx,val));
}
}
return answer;
}
5.注意事項
👉 C++優先キュー-優先キュー
1.queueuヘッダファイルを含む
#include> queue
2.優先キュー宣言
priority_queue<int> pq;
priority_queue<int, vector<int>, less<int>> pq;
3.優先キューに要素を挿入
pq.push(2)
4.まず、ガードキューの要素を取り出します。
pq.top()
5.優先順位キュー昇順の設定
priority_queue<int, vector<int>, greater<int>> pq;
6.他の方法を試みる
後で追加します
7.後期
後で追加します
Reference
この問題について([プログラマー/レベル2]プリンタ(C++)), 我々は、より多くの情報をここで見つけました https://velog.io/@qhsh866/프로그래머스Level2-프린터-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol