티스토리 뷰
가져갈 개수를 따로 계산해준 뒤, 중복값을 value로 카운트하도록 해시테이블을 만들어보자.
두번째 케이스인 [3,3,3,2,2,4]를 예시로 들겠다.
int count = nums.size()/2;
unordered_map<int,int> map;
for(int element : nums) {
map[element]++;
}
key(해시 함수 전으로 고려) | value |
3 | 3 |
2 | 2 |
4 | 1 |
count에는 nums의 size인 6을 2로 나눈 값 3이 저장된다.
다양성을 고려하기 위해, count와 key 종류의 개수를 비교할 필요가 있다.
key의 개수는 이 해시 테이블의 크기를 이용하면 될 것이다. .size()를 통해 알 수 있다.
int keyNum = map.size();
if(count <= keyNum)
//가져갈 수 있는 숫자보다 폰켓몬의 종류가 다양하거나 같음
return count;
else
//가져갈 수 있는 숫자보다 폰켓몬의 종류가 다양하지 않음
return keyNum;
}
*** 참고 ***
다른 사람의 풀이에서 확인한 부분!
저 keyNum을 조건 검사하는 부분을 아래와 같이 한줄로 바꿔버릴 수 있다.
return min(nums.size()/2,map.size());

정리
#include <vector>
#include <unordered_map>
using namespace std;
int solution(vector<int> nums)
{
unordered_map<int,int> map;
for(int element : nums) {
map[element]++;
}
return min(nums.size()/2,map.size());
}
'■ 알고리즘 > ◻ Programmers' 카테고리의 다른 글
[C++]가장 큰 수 (0) | 2022.11.09 |
---|---|
[C++] K번째수 (0) | 2022.11.09 |
[C++] 위장 (0) | 2022.11.09 |
[C++] 전화번호 목록 (0) | 2022.11.09 |
[C++] 완주하지 못한 선수 (0) | 2022.11.08 |