프로그래머스/알고리즘 고득점 Kit

[프로그래머스] [해시] Lv.1 /폰켓몬 (파이썬/Python)

junslee 2025. 3. 19. 09:38

1. 문제 설명

2. 풀이 과정 

문제를 요약하면, 서로 다른 수의 개수를 구하지만 n/2개 이하여야 하는 조건이 있다.

주어진 배열nums의 길이를 n에 저장하고 nums를 set()으로 초기화해서 중복 제거한다.

중복제거한 nums의 길이와 n을 2로 나눈 몫을 비교해 작은 값을 반환한다.

3. 코드

def solution(nums):
    n = len(nums)
    nums = set(nums)
    if len(nums) <= n // 2:
        return len(nums)
    return n//2

4. 다른 사람의 풀이

def solution(ls):
    return min(len(ls)/2, len(set(ls)))

5. 피드백

min()을 사용하면 한줄로 표현이 가능하다.

머릿속에 있는 과정을 간단히 표현하는 연습을 해야겠다. 

 

해시 알고리즘 문제로 분류되는 이유는 주로 데이터의 빠른 탐색과 저장이 필요하기 때문이다.

해시 테이블 또는 파이썬의 딕셔너리와 같은 자료구조를 사용하면, 폰켓몬의 종류 번호를 키로 하고 해당 종류의 폰켓몬 개수를 값으로 저장할 수 있다.

따라서, 이 문제를 해결할 때 해시 알고리즘의 핵심 개념인 데이터의 빠른 탐색과 저장이 활용된다.

 

해시 알고리즘 적용

  1. 폰켓몬 종류 저장: 딕셔너리를 사용하여 각 폰켓몬의 종류 번호를 키로 하고, 해당 종류의 개수를 값으로 저장합니다.
  2. 폰켓몬 종류 개수 확인: 딕셔너리의 키 개수를 통해 폰켓몬의 종류 개수를 쉽게 확인할 수 있습니다.
  3. 최대 종류 선택: N/2마리를 선택할 때, 가능한 한 많은 종류의 폰켓몬을 선택하기 위해 각 종류의 개수를 고려하여 선택합니다.