풀이 방법 : 정렬
A의 요소가 B의 요소보다 큰 쌍의 수를 출력해주면 되는 문제다.
주어지는 A와 B를 둘 다 오름차순으로 정렬 해주고 비교한다 치면, 만약 A[i]가 B[j]보다 크다고 한다면 당연하게도 A[i+1] 또한 B[j] 보다는 크다는 얘기이므로 쌍의 갯수를 누적해가면서 구해줄 수 있다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
int T;
cin >> T;
while (T > 0)
{
--T;
int ACnt, BCnt;
cin >> ACnt >> BCnt;
vector<int> vecA(ACnt);
vector<int> vecB(BCnt);
for (int i = 0; i < ACnt; ++i)
{
cin >> vecA[i];
}
for (int i = 0; i < BCnt; ++i)
{
cin >> vecB[i];
}
sort(vecA.begin(), vecA.end());
sort(vecB.begin(), vecB.end());
int Answer = 0;
int Idx = 0;
int Cnt = 0;
for (int i = 0; i < ACnt; ++i)
{
for (int j = Idx; j < BCnt; ++j)
{
if (vecA[i] <= vecB[j])
break;
++Idx;
++Cnt;
}
Answer += Cnt;
}
cout << Answer << '\n';
}
}