Coding Test/programmers
[프로그래머스] 폰켓몬 c++
owls
2022. 8. 1. 16:20
728x90
문제 설명
제한 사항
- nums는 폰켓몬의 종류 번호가 담긴 1차원 배열입니다.
- nums의 길이(N)는 1 이상 10,000 이하의 자연수이며, 항상 짝수로 주어집니다.
- 폰켓몬의 종류 번호는 1 이상 200,000 이하의 자연수로 나타냅니다.
- 가장 많은 종류의 폰켓몬을 선택하는 방법이 여러 가지인 경우에도, 선택할 수 있는 폰켓몬 종류 개수의 최댓값 하나만 return 하면 됩니다.
입출력 예
nums | result |
[3,1,2,3] | 2 |
[3,3,3,2,2,4] | 3 |
[3,3,3,2,2,2] | 2 |
문제 풀이
N마리의 폰켓몬 중 N/2를 가질 수 있다.
중복을 허용하지 않는 map을 사용해서 폰켓몬의 종류를 카운트한다.
map의 크기가 폰켓몬 종류 개수가 된다.
#include <vector>
#include <map>
using namespace std;
int solution(vector<int> nums)
{
int answer = 0;
map<int, int> H;
for(auto &it : nums){
H[it] += 1;
}
if(H.size()> (nums.size()/2)){
answer = int(nums.size()) / 2;
}
else{
answer = H.size();
}
return answer;
}
다른 풀이
set도 중복을 허용하지 않는 자료구조이다.
set은 오름차순 정렬되어 원소가 삽입 되고, unordered_set은 정렬되지 않고 원소가 삽입된 순서로 원소들이 저장된다.
set변수에 nums 벡터에 들어 있는 원소들로 초기화하여 생성한다.
int solution(vector<int> nums)
{
unordered_set<int> s(nums.begin(), nums.end());
return min(nums.size() / 2, s.size());
}
728x90