[프로그래머스 고득점 Kit] 폰켓몬 C++ 문제 풀이

    반응형

    #INFO

    난이도 : LEVEL1

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

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr


    #SOLVE

    N마리의 폰켓몬이 번호로 주어집니다.

    같은 번호의 폰켓몬은 같은 종류의 폰켓몬으로 취급하며, N마리의 포켓몬 중 N/2 마리의 폰켓몬을 가져갈 수 있습니다.

    이 때 가져갈 수 있는 폰켓몬의 최대 개수를 구하는 문제입니다. 

     

    우선, unordered_set 자료구조를 이용해 폰켓몬의 종류를 중복을 허용하지 않게 입력받습니다.

    예를들어  [3번, 1번, 2번, 3번] 총 4마리의 폰켓몬을 입력받았다면, set에는 [3번, 1번, 2번] 총 3마리의 폰켓몬의 정보가 저장됩니다.

        unordered_set<int> pocketmon;
        for(const auto& i : nums){
            if(pocketmon.find(i) == pocketmon.end()){
                pocketmon.insert(i);
            }
        }

     

    문제에서 최대 N/2 마리의 폰켓몬을 가져갈 수 있다고 했으니, 폰켓몬을 가져갈 수 있는 종류의 최대 가짓수는 N/2 입니다.

    따라서 N/2와 set에 저장된 폰켓몬의 정보의 크기중 더 큰 값을 정답으로 리턴하면 됩니다.

        int answer = 0;   
        int pocketmon_size = nums.size();    
        if(pocketmon.size() > pocketmon_size / 2) answer = pocketmon_size / 2;
        else answer = pocketmon.size();
        return answer;

    #CODE

    #include <iostream>
    #include <unordered_set>
    #include <vector>
    using namespace std;
    
    int solution(vector<int> nums)
    {
        int answer = 0;
        int pocketmon_size = nums.size();
        unordered_set<int> pocketmon;
        for(const auto& i : nums){
            if(pocketmon.find(i) == pocketmon.end()){
                pocketmon.insert(i);
            }
        }
    
        if(pocketmon.size() > pocketmon_size / 2) answer = pocketmon_size / 2;
        else answer = pocketmon.size();
        return answer;
    }

    도움이 되셨다면 하단의 공감 부탁드립니다!

    반응형

    댓글

    Designed by JB FACTORY