제한사항들을 확인해 보면 최적의 계산이 필요한 문제임을 알 수 있다. 해당풀이는 두 배열을 오름차순으로 정렬하고 B[i] 가 A의 원소들중 몇번째로 큰지를 체크해주어서 이기는 회수를 최대로 계산하는 풀이이다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> A, vector<int> B) {
int answer = 0;
sort(A.begin(), A.end());
sort(B.begin(), B.end());
for (int i=0; i<B.size(); i++) {
int cnt = lower_bound(A.begin(), A.end(), B[i]) - A.begin();
if (cnt - answer) answer++;// B[i]가 이전에 이기는 방법으로 고른 가지수를 빼고도 A의 원소보다 크다면
}
return answer;
}
다른 좋은 풀이도 첨부한다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> A, vector<int> B) {
int answer = 0;
sort(A.begin(), A.end());
sort(B.begin(), B.end());
int win_count = 0;
for (int i=0, j=0; j<B.size(); j++) {
if (A[i] < B[j]) {
i++;
win_count++;
}
}
return win_count;
}