간단하게 말하자면, n번째 우선순위에 있는 일이 몇 번째에 실행되느냐에 대한 문제다. 우선순위 큐를 사용하면 더욱 쉽게 접근할 수 있다. index가 필요한데, 문제는 큐에서는 인덱스를 지원하지 않는다는 점이다. 이는 카카오 코딩 테스트에서 배운 pair의 방식을 사용하면 될 것이다. 아쉽게도 내 힘으로 전체를 풀어내지는 못했다. 다른 사람들의 풀이를 참고하지 않고 슥슥 풀어내는 날이 금방 왔으면 좋겠다...
#include<queue>
#include<iostream>
using namespace std;
int main() {
int num;
cin >> num;
for (int i = 0; i < num; i++) {
int n, m;
cin >> n >> m;
queue<pair<int, int>> pq;
priority_queue<int> ppq;
for (int j = 0; j < n; j++) {
int input;
cin >> input;
pq.push(make_pair(j, input));
ppq.push(input);
}
int count = 0;
while (!pq.empty()) {
int f = pq.front().first;
int s = pq.front().second;
pq.pop();
if (s == ppq.top()) {
ppq.pop();
count++;
if (f == m) {
cout << count << endl;
break;
}
}
else {
pq.push(make_pair(f, s));
}
}
count = 0;
}
}