- Queue의 선입선출 개념을 활용하여 프린터 순서 확인
- pair를 이용해 원하는 순서가 바뀌더라도 처음의 위치를 기억한다.
일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다.
제한사항
처음 인쇄 순서가 주어지면 그 인쇄 순서를 기준으로 한 위치에서의 문서가 언제 출력되는지를 확인해야한다.
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
//pair를 활용해서 처음의 위치와 중요도를 기록한다.<중요도, 처음위치>
queue<pair<int, int> > q;
//priorities의 index
int index=0;
for(int i=0; i<priorities.size(); i++){
q.push({i, priorities[i]});
}
//중요도가 높은 순서대로 출력할 수 있게 내림차순 정렬
sort(priorities.rbegin(), priorities.rend());
while(1){
//q에서 하나씩 꺼내며 원하는 중요도의 문서인지 확인한다.
pair<int, int> tmp = q.front();
q.pop();
if(tmp.second==priorities[index]){
index++;
answer++;
if(tmp.first==location){
return answer;
}
}
else{
q.push(tmp);
}
}
return answer;
}