プログラムプリンタ
マジシャンです
一般的なプリンタでは、必要な印刷順に印刷されます.したがって、重要なドキュメントは後で印刷される可能性があります.この問題を解決するために,重要文書を先に印刷するプリンタを開発した.この新しく開発されたプリンタは、次のように印刷されます.
印刷待ちリスト
私が印刷を要求したドキュメントが何回目の印刷なのか知りたいです.上記の例では、Cは1位、Aは3位である.
ソリューション関数を作成してください.パラメータが現在のキュー・リスト内のドキュメントの重要度のソート順と、印刷を要求したドキュメントが現在のキュー・リスト内にある場所を指定した場合、印刷を要求したドキュメントの何回目の印刷かを返します.
せいげんじょうけん
方法
整理すると、
この問題では,数字が大きい方が優先順位が高い.また、プリンタ待ちリストもゼロから計算を開始します.
最上位のドキュメントより優先度が高いドキュメントが残りの待機リストにある場合は、最上位のドキュメントを最背面に送信します.
一番前のドキュメントが削除されて戻ってくるので、Qを初めて思い出しました.
ただし、比較の参照が必要な待機リストで優先度の高いドキュメントを検索する必要がありますが、キューは参照できません...!そこでデックを思い出した.
#include <string>
#include <vector>
#include <deque>
using namespace std;
struct Mypair{int val, index;}; //문서의 이름, 문서의 index
deque <Mypair> waitList;
bool prioritycheck(){ //우선순위 높은게 있는지 확인
if(waitList.size() == 1) return false;
for(int i = 1; i < waitList.size(); i++)
if(waitList[0].val < waitList[i].val) return true;
return false;
}
int solution(vector<int> priorities, int location) {
int answer = 0;
for(int i = 0; i < priorities.size(); i++){
Mypair a;
a.val = priorities[i];
a.index = i;
waitList.push_back(a);
}
while(1){
if(waitList.empty()) break;
if(prioritycheck()){// 순위 높은게 있다면 맨 뒤로 가장앞의 문서를 보내기
waitList.push_back(waitList.front());
waitList.pop_front();
}else{//순위 높은게 없다면 앞의 문서를 출력해주는데(pop) 숫자를 세줘야함
if(waitList.front().index == location){
answer++;
break;
}else{
waitList.pop_front();
answer++;
}
}
}
return answer;
}
Reference
この問題について(プログラムプリンタ), 我々は、より多くの情報をここで見つけました https://velog.io/@fufru/PRGRMSPrinterテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol