#include <algorithm>
#include <vector>
#include <iostream>

using namespace std;

int solution(vector<int> nums)
{
    int answer = 0;
    int get_num = nums.size() / 2;
    sort(nums.begin(), nums.end());
    nums.erase(unique(nums.begin(), nums.end()), nums.end());
    int res_num = nums.size();
    if (get_num < res_num)
        answer = get_num;
    else
        answer = res_num;

    return answer;
}

다른 풀이

#include <bits/stdc++.h>
using namespace std;

int solution(vector<int> nums) {
    unordered_set<int> s(nums.begin(), nums.end());

    return min(nums.size() / 2, s.size());
}

#include <vector>
#include <unordered_map>

using namespace std;

int solution(vector<int> nums)
{
    unordered_map<int, int> hash;

    for (auto num: nums) {
        hash[num] += 1;
    }

    return min(hash.size(), nums.size() / 2);

}