[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/1845
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
[문제 풀이]
처음에 백트래킹을 써야하나 헷갈렸던 문제.
하지만 다시 생각해보니 생각보다 쉽게 해결이 되었다.
우선, set을 써서 중복값을 제거한 key value값을 얻자.
그렇게 값을 얻은 크기의 2배가 포켓몬 숫자보다 적다면 크기를 return 하고 아니라면 포켓몬 숫자의 / 2를 한 값을 return 하자.
[코드]
#include <vector>
#include <set>
#include <iostream>
using namespace std;
int solution(vector<int> nums)
{
int answer = 0;
set<int> s(nums.begin(),nums.end()); //set을 써서 중복값을 제거하였다.
if(s.size() * 2 <= nums.size()){ // 만일 중복체크한 set 값의 2배가 포켓몬 숫자보다 작다면
answer = s.size(); //답은 중복체크한 값
}
else if(s.size() * 2 > nums.size()){ //만일 아니라면
answer = nums.size() / 2; //답은 포켓몬 숫자 / 2
}
return answer;
}