코딩 테스트/프로그래머스

[Python] 프로그래머스 폰켓몬

위시리 2024. 10. 8. 00:45

알고리즘 고득점 kit - 해시 - lv 1

 

문제 분석

  • n마리의 포켓몬 중 n/2마리를 가져갈 수 있음
  • 포켓몬 종류에 따라 번호를 붙임
  • >> 같은 종류의 포켓몬은 같은 번호
  • 최대한 많은 종류의 포켓몬을 가져가고 싶다.
  • 가장 많은 종류의 포켓몬 n/2 마리를 선택하는 방법
  • 포켓몬 종류 번호의 개수를 return 

 

코드 설계

  • nums → HashMap (key : 종류, value : 마릿수) -- 이걸 어떻게 구현해야할 지 잘 모르겠다..
    • num list를 앞에서 부터 하나씩 값을 빼고 ( for i in nums )
    • cnt = [ ] 배열 생성
    • nums 안에 있는 값 i에 대해 몇개씩 존재하는지 확
  • if  n/2  >=  key의 갯수 이면 모든 종류를 가질 수 있음
  • else n/2 종류를 가질 것

 

정답 코드

def solution(nums):
    answer = 0
    cnt = {}
    for i in nums :
        cnt[i] = nums.count(i)

    keys = len(cnt)

    if len(nums)//2 <= keys :
        answer = len(nums)//2
    else :
        answer = keys
    answer = answer
    return answer

 

다른 사람 코드

def solution(ls):
    return min(len(ls)/2, len(set(ls)))
def solution(nums):
    return min(len(set(nums)), len(nums) // 2)
def solution(nums):
    answer = 0
    myList = set(nums)
    if len(nums)/2 > len(myList):
        answer = len(myList)
    else:
        answer = len(nums)/2
    return answer