[Algo] Programmers level 2 폰켓몬 (Hash)

heeeeeeeee·2025년 5월 2일

Algorithm

목록 보기
12/14
def solution(nums):
    
    dic = dict()
    
    # 같은 종류의 폰켓몬 중복 제거 
    for n in nums:
        dic[n] = 1
        
    # (전체 종류 / 2)와 중복 제거된 종류의 수를 비교
    # (전체 종류 / 2)이 작거나 같으면 이게 최적이므로 즉시 return 
    if len(nums) // 2 <= len(dic):
        return len(nums) // 2
    # 아니면 dic의 수가 최적 
    return len(dic)
    
  • 먼저 같은 종류의 폰켓몬은 딕셔너리를 통해 중복을 제거했다

  • 선택 마리 수(len(nums) // 2)가 총 종류 수(중복이 제거된 종류의 수)를 비교 했을 때 전자의 값이 작다면 선택 마리 수가 정답이 된다

    • 아무리 폰켓몬 종류가 많아도, 데려갈 수 있는 마리 수에 제한(전체//2)이 있으므로, 최대 마리 수 이상의 종류를 가져갈 수는 없다
  • 그게 아니라면 총 종류 수(중복 제거된 종류의 수)가 정답이 된다
    - 우선 총 종류를 하나씩 선택한 뒤에 부족한 마리 수 만큼 선택하게 되는데, 여러마리여도 종류는 1개가 되기 때문에 카운트 할 필요 없다 -> 전체 종류 수가 답이 됨

0개의 댓글