Blog

ENGINEERING NOTE

[프로그래머스] 폰켓몬

폰켓몬N마리의 폰켓몬 중 N/2마리를 가져갈 수 있다.폰켓몬의 종류 번호가 담긴 배열이 주어지는데, 중복된 번호가 있을 수 있다.가져갈 수 있는 폰켓몬의 종류 수를 최대로 만들어야 한다.즉, 중복을 제거한 종류 수를 구해야하므로 Set 혹은 unordered_set을

코딩테스트

문제 링크

프로그래머스 폰켓몬

접근 방법

  • N마리의 폰켓몬 중 N/2마리를 가져갈 수 있다.
  • 폰켓몬의 종류 번호가 담긴 배열이 주어지는데, 중복된 번호가 있을 수 있다.
  • 가져갈 수 있는 폰켓몬의 종류 수를 최대로 만들어야 한다.

즉, 중복을 제거한 종류 수를 구해야하므로 Set 혹은 unordered_set을 활용하면 된다.


풀이 코드

text
int solution(vector<int> nums)
{
    int answer = 0;

	set<int> s(nums.begin(), nums.end()); // 중복을 제거한 set 생성

	answer = s.size() <= nums.size() / 2 ? s.size() : nums.size() / 2; // s의 크기가 nums.size() / 2보다 작거나 같으면 s.size()를, 아니면 nums.size() / 2를 반환

    return answer;
}

다른 풀이

Map을 이용한 풀이방식도 가능하다.

text
#include <vector>
#include <unordered_map>

using namespace std;

int solution(vector<int> nums)
{
    unordered_map<int, int> hash;

    for (auto num: nums) {
        hash[num] += 1;
    }

    return min(hash.size(), nums.size() / 2);

}