본문 바로가기
🧑‍💻 Coding Test/Hash Table

[Programmers] 폰켓몬

by 헤이즐넛 좋아하는 개발자 2025. 6. 29.

시작하기 전에

프로그래머스 알고리즘 고득점 Kit에서 해시 단원의 두 번째 문제입니다.


I. Description


II. Code

def solution(nums):
    pocket_dict = {}
    
    # {'포켓몬 번호': '포켓몬 개수'} 형태의 딕셔너리 생성
    for num in nums:
        pocket_dict[num] = pocket_dict.get(num, 0) + 1
    
    # 포켓몬 종류의 개수가 전체 개수의 절반보다 작거나 같으면 그 개수를 반환
    return min(len(pocket_dict), len(nums) // 2)

# Test cases
if __name__ == "__main__":
    nums_list = [[3, 1, 2, 3], [3, 3, 3, 2, 2, 4], [3, 3, 3, 2, 2, 2]]
    for nums in nums_list:
        result = solution(nums)
        print(result)

 

입출력 예 #1과 #2를 보면, N/2마리의 포켓몬을 선택할 때 나오는 종류의 최댓값은 당연히 N/2다.

결국 고려해야 하는 경우는 원래부터 포켓몬의 종류의 개수가 N/2보다 작은 경우다. 그러한 경우에 포켓몬의 종류의 개수를 리턴하면 된다.