티스토리 뷰

가져갈 개수를 따로 계산해준 뒤, 중복값을 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
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함