C++ STL에서 set을 이용해서 풀었습니다. set은 중복을 허용하지 않는 균형 이진 트리입니다. 따라서 주어진 모든 폰켓몬을 set에 insert하고 그 size()를 통해 답을 구했습니다.
만약 N/2보다 작으면 중복이 많이 발생한 것을 의마하고 폰켓몬의 종류의 개수의 최대는 size()가 됩니다. N/2보다 크면 중복이 적게 발생한 것을 의미하고 폰켓몬의 종류의 개수의 최대는 N/2가 됩니다.
#include <vector>
#include <set>
using namespace std;
int solution(vector<int> nums)
{
int answer = 0;
int N = nums.size();
// set은 중복을 허용하지 않는 균형 이진 트리
set<int> s;
for(int i = 0; i < nums.size(); i++) {
s.insert(nums[i]);
}
if(s.size() < (N/2)) {
answer = s.size();
}
else {
answer = N/2;
}
return answer;
}