[C++/프로그래머스] 포켓몬

다곰·2022년 10월 21일
0

우당탕탕 코테준비

목록 보기
13/98

✅ 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 는 중복되는 원소가 허용되지 않기 때문에 포켓몬의 종류만 뽑아올 때 사용할 수 있음

profile
다교미의 불꽃 에러 정복기

0개의 댓글