Algorithm/Programmers(c++)

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

kim-hasa 2021. 7. 30. 12:55

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

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

가장 먼저 벡터를 정렬합니다. 그 이후에 종류가 다르면 가져갈 수 있는 숫자를 증가시키고 같으면 넘어갑니다.

 

만약 최대로 가져갈 수 있는 종류 수보다 커지면 최대 수를 리턴합니다.

#include <vector>
#include <algorithm>
using namespace std;

int solution(vector<int> nums)
{
    int answer = 0;
    int count = nums.size() / 2;    // 최대 가져갈 수 있는 종류
    int ponketmon = 0;              // 종류의 번호
    
    sort(nums.begin(), nums.end()); // 정렬
    
    ponketmon = nums[0];
    answer++;               // 초기값 저장
    
    for(int i=1; i < nums.size(); i++)
    {
        if(nums[i] != ponketmon)    // 종류가 다르면 증가
        {
            ponketmon = nums[i];
            answer++;
            
            if(answer >= count)     // 가져갈수 있는 것보다 크면
            {
                return count;       // 최대값 리턴
            }
        }
    }
    return answer;
}

※ 코드가 지저분 할 수 있습니다.