티스토리 뷰
가져갈 개수를 따로 계산해준 뒤, 중복값을 value로 카운트하도록 해시테이블을 만들어보자.
두번째 케이스인 [3,3,3,2,2,4]를 예시로 들겠다.
    int count = nums.size()/2;
    unordered_map<int,int> map;
    for(int element : nums) {
        map[element]++;
    }| key(해시 함수 전으로 고려) | value | 
| 3 | 3 | 
| 2 | 2 | 
| 4 | 1 | 
count에는 nums의 size인 6을 2로 나눈 값 3이 저장된다.
다양성을 고려하기 위해, count와 key 종류의 개수를 비교할 필요가 있다.
key의 개수는 이 해시 테이블의 크기를 이용하면 될 것이다. .size()를 통해 알 수 있다.
    int keyNum = map.size();
    if(count <= keyNum) 
        //가져갈 수 있는 숫자보다 폰켓몬의 종류가 다양하거나 같음
        return count;
    else    
        //가져갈 수 있는 숫자보다 폰켓몬의 종류가 다양하지 않음
        return keyNum;       
}
*** 참고 ***
다른 사람의 풀이에서 확인한 부분!
저 keyNum을 조건 검사하는 부분을 아래와 같이 한줄로 바꿔버릴 수 있다.
return min(nums.size()/2,map.size());
정리
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<int> nums)
{
    unordered_map<int,int> map;
    for(int element : nums) {
        map[element]++;
    }
    return min(nums.size()/2,map.size());
}
'■ 알고리즘 > ◻ Programmers' 카테고리의 다른 글
| [C++]가장 큰 수 (0) | 2022.11.09 | 
|---|---|
| [C++] K번째수 (0) | 2022.11.09 | 
| [C++] 위장 (0) | 2022.11.09 | 
| [C++] 전화번호 목록 (0) | 2022.11.09 | 
| [C++] 완주하지 못한 선수 (0) | 2022.11.08 |