GitHubSeob

C++ / 프로그래머스 / 폰켓몬 본문

Programmers/Level 1

C++ / 프로그래머스 / 폰켓몬

GitHubSeob 2021. 8. 21.

문제

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

 

코딩테스트 연습 - 폰켓몬

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

programmers.co.kr

문제풀이

복잡해 보일 수 있는데 간단히 보면 경우의 개수가 아닌 몇 마리의 폰켓몬을 고를 수 있는지만 구하면 된다.

폰켓몬의 최대 개수를 넘으면 최대 개수를 출력하고 그렇지 않으면 폰켓몬의 종류의 개수를 출력하면 된다.

현재 인덱스의 값과 인덱스+1 값을 비교하면서 둘이 같으면 인덱스+1 값을 지운다.

그렇지 않으면 인덱스 값을 1 증가시켜 다음수를 탐색한다.

반복이 끝나면 바뀐 nums.size와 맨 처음 nums.size/2의 값 중 작은 값을 return 한다.

 

 

코드

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

int solution(vector<int> nums)
{
    int max_cnt = nums.size() / 2;
    sort(nums.begin(), nums.end());
    for (int idx = 0; idx < nums.size() - 1;) {
        if (nums[idx] == nums[idx + 1]) nums.erase(nums.begin() + idx + 1);
        else idx++;
    }
    int nums_size = nums.size();
    return min(max_cnt, nums_size);
}