알고리즘/프로그래머스

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

녕이 2022. 4. 5. 14:58
728x90

 

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

 

코딩테스트 연습 - 폰켓몬

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

programmers.co.kr

 

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

int solution(vector<int> nums){
    int answer = 0;
    vector<int> mon; //종
    int cnt = 0;
    int canTake = nums.size()/2;
    for(int i=0; i<nums.size(); i++){
        auto it = find(mon.begin(), mon.end(), nums[i]);
        if(it == mon.end()) { //해당 값이 mon에 없다면
            mon.push_back(nums[i]);
            cnt++;
        }
    }
    answer = canTake < cnt ? canTake : cnt;
    return answer;
}

 

vector에서 폰켓몬 종류 개수를 찾기 위해서 nums를 돌면서 새로운 종류의 폰켓몬이 나오면 mons에 넣어주고, 카운팅을 해줬다.

이를 위해서 Iterator와 find() 함수를 사용했다. 

 

그리고, 만약 가질 수 있는 폰켓몬의 개수보다 폰켓몬의 종류의 개수가 더 많다면 가질 수 있는 폰켓몬의 개수를 출력해주고, 폰켓몬의 종류 개수가 더 적다면 폰켓몬의 종류 개수를 출력해줬다. 

answer = canTake < cnt ? canTake : cnt; 

//canTake : 가질 수 있는 폰켓몬의 개수
//cnt     : 폰켓몬 종류 수

 

 

728x90