배열과 큐를 관리해 준다.
큐는 값과 입력했을 때의 인덱스를 관리해 준다.
배열은 내림차 순으로 정렬하여 큐의 값과 일치하면 배열의 다음 인덱스를 확인한다.
만약 일치하지 않으면 큐를 다시 집어넣어 반복해 준다.
일치하면서 입력할 때의 인덱스가 M이면 현재 배열의 인덱스를 출력해 주고 끝낸다.
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
typedef pair<int, int> pii;
int a[101], tc, N, M, idx;
queue<pii> q;
int main()
{
ios::sync_with_stdio(0), cin.tie(0);
cin >> tc;
while (tc--)
{
while (!q.empty())
q.pop();
idx = 0;
cin >> N >> M;
for (int i = 0; i < N; ++i)
{
cin >> a[i];
q.push({a[i], i});
}
sort(a, a + N, greater<int>());
while (true)
{
pii cur = q.front();
q.pop();
if (cur.first == a[idx])
{
++idx;
if (cur.second == M)
{
cout << idx << "\n";
break;
}
}
else
q.push(cur);
}
}
return 0;
}
큐는 2개의 큐를 만들거나 2개의 속성을 가지는 자료형을 사용하면 된다.