✅ LV. 1
🔖 해시
포켓몬 종류 조합을 어떻게 하는가는 전혀 관계가 없음
1. 해시맵을 통해 포켓몬 종류를 key
값으로 해서 동일한 key
값을 가지면 value
값을 늘려주는 방식으로 구현
2. 포켓몬 종류가 많아도 가질 수 있는 개수가 한정적이기 때문에 가질 수 있는 개수가 최대 가짓수가 되고 포켓몬 종류가 적으면 어떻게 조합해도 최대 가짓수는 한정되기 때문에 포켓몬 종류 개수와 N / 2
를 비교해서 작은 수를 answer
로 처리
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<int> nums)
{
int answer=0;
unordered_map<int,int> map;
for(int i=0;i<nums.size();i++) {
if(map.find(nums[i])==map.end()) {
map.insert({nums[i],1});
}
else map[nums[i]]++;
}
answer=min(map.size(),nums.size()/2);
return answer;
}
최종적으로 종류의 개수와 최대로 가져갈 수 있는 개수 중에 더 작은 값을 answer
로 쓰기 때문에 조금 더 간단하게 구현을 하자면, 종류별로 몇 개씩 있는지는 관계없이 종류의 개수만 있으면 풀이할 수 있다.
➡️ unordered_set
사용해서 종류 개수만 뽑아오기
#include <unordered_set>
using namespace std;
int solution(vector<int> nums) {
unordered_set<int> s(nums.begin(), nums.end());
return min(nums.size() / 2, s.size());
}
unordered_set<int> s(nums.begin(), nums.end());
➡️ nums
벡터의 원소를 unordered_set
로 사용하겠다고 선언해주는 것
➡️ unordered_set
는 중복되는 원소가 허용되지 않기 때문에 포켓몬의 종류만 뽑아올 때 사용할 수 있음