1점짜리 문제다.
중복제거 해주고, N/2이랑 중복이 제거된 갯수 중에 더 작은 값을 리턴해주면 된다.
#include <vector>
using namespace std;
int hashMap[200000];
int solution(vector<int> nums)
{
int answer = 0;
vector<int> tmp;
int n = nums.size() / 2;
for(int i=0;i<nums.size();i++) {
if(hashMap[nums[i]] == 0) {
hashMap[nums[i]] = 1;
answer++;
}
}
answer = min(answer, n);
return answer;
}
아래는 중복제거를 위해서 unordered_set으로 구현한 코드이다. (정렬이 필요없기 때문에 set을 쓸 필요가 없음)
#include <vector>
#include <unordered_set>
#include <algorithm>
using namespace std;
int solution(vector<int> nums)
{
unordered_set<int> s(nums.begin(), nums.end());
return min(s.size(), nums.size() / 2);
}