코드 1
#include <vector>
#include <set>
using namespace std;
int solution(vector<int> nums)
{
set <int> numset(nums.begin(), nums.end());
if(numset.size()> (nums.size()/2))
return nums.size()/2;
return numset.size();
}
코드 2
#include <vector>
#include <algorithm>
using namespace std;
int solution(vector<int> nums)
{
sort(nums.begin(), nums.end());
int uniqueCount = unique(nums.begin(), nums.end()) - nums.begin();
return min(uniqueCount, static_cast<int>(nums.size() / 2));
}
풀이 설명
sort
함수를 사용하여 입력 벡터를 정렬합니다.
unique
함수를 사용하여 중복된 요소를 벡터의 맨 뒤로 이동시키고, 중복되지 않은 요소들의 시작점(첫 번째 중복 요소의 위치)을 반환합니다. 이 때 반환된 값에서 begin
을 빼줌으로써 중복되지 않은 요소의 개수를 계산할 수 있습니다.
- 반환된 중복되지 않은 요소의 개수와
nums.size() / 2
중 작은 값을 반환합니다. nums.size() / 2
는 최대로 선택할 수 있는 요소의 개수이며, 중복되지 않은 요소의 개수가 이를 초과할 수 없습니다.