알고리즘 공부/프로그래머스 [C++]

프로그래머스 : 폰켓몬 [C++]

이포터 2022. 11. 1. 17:26

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

문제 설명

1. N/2마리의 폰켓몬을 선택하는 방법 중
2. 가장 많은 종류의 폰켓몬을 선택하는 방법을 찾아
3. 그때의 폰켓몬 종류 번호의 개수를 return 하도록 solution 함수를 완성해주세요.

 

문제 입출력 예)

nums result
[3,1,2,3] 2
[3,3,3,2,2,4] 3
[3,3,3,2,2,2] 2

 

문제 풀이

Hash Table을 사용해서 문제에 접근했다.

포켓몬의 종류와 수를 각각의 map<int,int>에 넣는다.

최대로 가질 수 있는 포켓몬의 수는 N/2이다.

N/2 > map.size()가 성립할 경우 map.size()의 종류를 고를 수 있고

N/2 <= map.size()가 성립할 경우 N/2개의 종류를 고를 수 있다.

 

#include <vector>
#include <map>
#include <iostream>

using namespace std;


int solution(vector<int> nums)
{
    map<int, int> pok;
    for(int i=0; i<nums.size(); i++){
        pok[nums[i]]++;
    }
    
    return nums.size()/2 > pok.size()?pok.size():nums.size()/2;
}

 

 

  • Hash map 문제가 재밌어졌다. ㅎㅋ