https://www.acmicpc.net/problem/1966
1.우선순위 큐를 표현하기 위한 벡터와 클래스 활용
(우선순위 큐 STL이 있지만 이번 기회에 구현해봄)
2.우선순위 큐와 원래 입력의 큐의 가장 앞 원소들을 비교해가며 몇번째에 출력하는지 구함
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
class Info{
public:
int idx;
int priority;
bool operator < (Info c)
{
if(this->priority < c.priority)
return true;
else if(this->priority == c.priority)
if(c.idx < this->idx)
return true;
return false;
}
};
int main()
{
int cnt;
cin >> cnt;
int n, m, priority;
for(int i = 0; i < cnt; i++)
{
queue<Info> priorityQ;
queue<Info> q;
vector<Info> v;
cin >> n >> m;
for(int j = 0; j < n; j++)
{
Info temp;
cin >> priority;
temp.priority = priority;
temp.idx = j;
v.push_back(temp);
q.push(temp);
}
for(int j = 0; j < n - 1; j++)
for(int k = j + 1; k > 0; k--)
{
if(v[k - 1] < v[k])
swap(v[k - 1], v[k]);
}
for(int j = 0; j < v.size(); j++)
{
priorityQ.push(v[j]);
}
int result = 0;
while(!q.empty())
{
int idx = q.front().idx;
int prior = q.front().priority;
if(priorityQ.front().priority > prior)
{
q.push(q.front());
q.pop();
}
else
{
result++;
q.pop();
priorityQ.pop();
if(idx == m)
{
cout << result << endl;
break;
}
}
}
}
}