해당 문제는 아래의 3가지 조건을 만족하는 프린터에서 요청한 문서가 몇 번째로 인쇄되는지 구하는 문제이다.
먼저 해당 문제를 풀기위해서는 조건의 흐름대로 구현을 해줄 필요가 있다. 앞에 것을 꺼내고 더 중요도가 높은 문서가 있는지 확인하고 있으면 가장 뒤로 보내고 없으면 인쇄하는 흐름을 구현해야한다. 나는 priority_queue와 queue를 동시에 사용하였다. 우선 priority_queue를 사용하여 현재 인쇄해야할 문서에서 가장 높은 우선순위를 얻었다. 그리고 자신의 기존 인쇄 순서와 우선순위가 저장된 pair를 다루는 queue를 사용하여 문서들을 살피고 뒤로 넣거나 인쇄하는 작업을 진행하였다. 현재가 몇 번째로 인쇄되는지를 구하기 위해서 order 변수도 사용하였다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
int solution(vector<int> priorities, int location) {
int answer = 0;
priority_queue<int> pq;
queue<pair<int, int>> q;
for (auto el : priorities)
pq.push(el);
for (int i = 0; i < priorities.size(); i++) {
q.push(make_pair(i, priorities[i]));
}
int order = 0;
while (q.size()) {
auto pqT = pq.top();
auto qF = q.front();
q.pop();
if (pqT == qF.second) {
order++;
if (qF.first == location) {
answer = order;
break;
}
pq.pop();
continue;
}
q.push(qF);
}
return answer;
}
int main() {
vector<int> priorities;
priorities.push_back(1);
priorities.push_back(1);
priorities.push_back(9);
priorities.push_back(1);
priorities.push_back(1);
priorities.push_back(1);
int ans = solution(priorities, 0);
printf("%d", ans);
return 0;
}