int solution(vector<int> nums)
{
int answer = 0;
std::unordered_map<int, int> typeCounts;
for (int type : nums)
{
typeCounts[type]++;
}
int distinctTypes = typeCounts.size();
int maxTypesCanChoose = nums.size() / 2;
answer = std::min(distinctTypes, maxTypesCanChoose);
return answer;
}
std::unordered_map<int, int> typeCounts; 에 관하여
typeCounts[type]++을 보면 만약 type이 3이면 해당 vector에 3이 n개가 있고 type이 2이면 해당 vector에 2가 m개가 있고 .. 이런식이다.
(내부느 <3,n>,<2,m>.. 이런식으로 되어 있다.)
그래서 종류별로 총 typeCounts.size()개 있다고 나온다. 즉 vector안에 겹치지 않은 수가 총 typeCounts.size()개 있는 것이다.
그리고 answer = std::min(distinctTypes, maxTypesCanChoose);
maxTypesCanChoose고를 수 있는 최대 수와 distinctTypes의 최소값을 비교하여 더 작은 수를 출력한다.
이유 : vector가 1,2,3,4,5,6,7,8,9,10이면 typeCounts.size() 10개이며 maxTypesCanChoose는 5개이다.
문제는 vector의 갯수 n의 n/2만큼 가져가라고 한다.
'개인 공부 복습 > 알고리즘' 카테고리의 다른 글
| 같은 숫자는 싫어 (스택/ 큐) (0) | 2024.02.05 |
|---|---|
| 완주하지 못한 선수 (해시) (0) | 2024.02.04 |
| H-Index (정렬) (0) | 2024.02.04 |
| 람다 활용 연습 (0) | 2024.02.04 |
| 가장 큰 수 ( 정렬) (0) | 2024.02.04 |