본문 바로가기

알고리즘/프로그래머스

[프로그래머스 코딩테스트 고득점 Kit / 해시] 폰켓몬 (python)

728x90

풀이

def solution(nums):
    answer = 0
    mon = set(nums)
    
    if len(mon) <= len(nums)/2:
        answer = len(mon)
    else:
        answer = len(nums)/2
    return answer
  • 집합(set)을 사용하여 문제 해결
  • nums 배열을 mon이라는 집합 안에 넣어서 포켓몬의 중복을 없앴다.
  • 종류가 겹치지 않는다고 가정했을 때, 내가 가져갈 수 있는 최대값은 N/2임. 따라서 겹치지 않는 포켓몬이 N/2 이상이라면 N/2가 최대값이고, 겹치지 않는 포켓몬이 N/2보다 작다면 겹치지 않는 포켓몬 전체 수가 최대값이 됨.
  • 해시 문제라서 처음에는 딕셔너리로 풀었는데 값을 저장할 이유도 없고 중복만 제거하면 돼서 집합으로 바꿈. 연산시간이 훨씬 줄었다.
반응형