큐를 돌며 출력해주며 개수를 세주고 location에 해당하는 문서가 출력될 때 반환해주면 된다고 생각했다.
#include <string>
#include <vector>
#include <queue>
using namespace std;
struct obj
{
int idx;
int num;
};
int solution(vector<int> priorities, int location)
{
int answer = 0;
queue<obj> q;
priority_queue<int> pq;
for (int i = 0; i < priorities.size(); ++i)
{
q.push({i, priorities[i]});
pq.push(priorities[i]);
}
while (!q.empty())
{
obj o = q.front();
q.pop();
if (o.num == pq.top())
{
pq.pop();
++answer;
if (o.idx == location)
return answer;
}
else
{
q.push(o);
}
}
}
obj라는 구조체를 만들었다. 우선순위와 인덱스를 저장하기 위해 만든 것인데 다른 방법으로도 해결할 수 있다고 생각한다.
obj를 자료형으로 쓰는 큐와 int 우선순위 큐를 만들고 값을 집어넣어 줬다.
반복문을 돌며 가장 우선순위가 높은 값인지 확인하며 출력해주고 아닐 시 다시 큐에 집어넣어 순서를 유지했다.
출력하다가 인덱스와 location이 일치하면 몇 번째로 인쇄된 건지 반환해준다.