문제 링크
접근 방법
- N마리의 폰켓몬 중 N/2마리를 가져갈 수 있다.
- 폰켓몬의 종류 번호가 담긴 배열이 주어지는데, 중복된 번호가 있을 수 있다.
- 가져갈 수 있는 폰켓몬의 종류 수를 최대로 만들어야 한다.
즉, 중복을 제거한 종류 수를 구해야하므로 Set 혹은 unordered_set을 활용하면 된다.
풀이 코드
text
int solution(vector<int> nums)
{
int answer = 0;
set<int> s(nums.begin(), nums.end()); // 중복을 제거한 set 생성
answer = s.size() <= nums.size() / 2 ? s.size() : nums.size() / 2; // s의 크기가 nums.size() / 2보다 작거나 같으면 s.size()를, 아니면 nums.size() / 2를 반환
return answer;
}다른 풀이
Map을 이용한 풀이방식도 가능하다.
text
#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);
}