개인 공부 복습/알고리즘

폰켓몬 (해시)

빡곰 2024. 2. 4. 14:25

int solution(vector<int> nums)
{
    int answer = 0;
    std::unordered_map<int, int> typeCounts;
    for (int type : nums) 
    {
        typeCounts[type]++;
    }

    int distinctTypes = typeCounts.size();
    int maxTypesCanChoose = nums.size() / 2;
    answer = std::min(distinctTypes, maxTypesCanChoose);
    return answer;
}

 

 

   std::unordered_map<int, int> typeCounts; 에 관하여

  

  typeCounts[type]++을 보면 만약 type이 3이면 해당 vector에 3이 n개가 있고 type이 2이면 해당 vector에 2가 m개가 있고 .. 이런식이다.

(내부느 <3,n>,<2,m>.. 이런식으로 되어 있다.)

그래서 종류별로 총 typeCounts.size()개 있다고 나온다. 즉 vector안에 겹치지 않은 수가 총 typeCounts.size()개 있는 것이다.
그리고  answer = std::min(distinctTypes, maxTypesCanChoose);

maxTypesCanChoose고를 수 있는 최대 수와 distinctTypes의 최소값을 비교하여 더 작은 수를 출력한다.
이유 : vector가 1,2,3,4,5,6,7,8,9,10이면 typeCounts.size() 10개이며 maxTypesCanChoose는 5개이다.

문제는 vector의 갯수 n의  n/2만큼 가져가라고 한다.

'개인 공부 복습 > 알고리즘' 카테고리의 다른 글

같은 숫자는 싫어 (스택/ 큐)  (0) 2024.02.05
완주하지 못한 선수 (해시)  (0) 2024.02.04
H-Index (정렬)  (0) 2024.02.04
람다 활용 연습  (0) 2024.02.04
가장 큰 수 ( 정렬)  (0) 2024.02.04