본문 바로가기
Algorithm/해시

[프로그래머스 lv 1] 폰켓몬

by HANNI하니 2023. 5. 29.

사용 언어 - Python3

문제 - 폰켓몬

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

정답

해시 (정답 맞춘 여부 X)

nums/2 포켓몬 뽑을 때 중복을 제거한 포켓몬 사이에서 뽑아주면, answer = nums/2

3개를 뽑아야하는데, 중복을 제거하니 2종류(len(nums)) 밖에 없다면 len(nums)을 출력한다.

 

min(len(nums), choose)

def solution(nums):
    answer = 0
    
    choose = int(len(nums)/2)
    nums = set(nums)
    answer = min(len(nums),choose)
    
    return answer

 

hash 사용하기

1. dictionary의 key, value 처럼 HashDict에 {n,1}를 저장한다.

value 값은 굳이 필요없고, 한개를 넣었다는 확인만 해준다.

2. min(len(HashDict), len(nums)//2)

# 해시 사용하기
def solution(nums):
    answer = 0
    HashDict = {}
    
    for n in nums:
        HashDict[n] = 1
        # {숫자번호,1} -> 중복된 숫자번호는 덮어씌워짐
        
    # 중복된 숫자번호가 없는 경우 = 뽑으려는 포켓몬 개수  
    if len(nums)//2 <= len(HashDict): 
        return len(nums)//2
    
    # 중복된 숫자번호가 있는 경우 = HashDict의 개수
    return len(HashDict)

 

# 해시 사용하기
def solution(nums):
    answer = 0
    HashDict = {}
    
    for n in nums:
        HashDict[n] = 1
        # {숫자번호,1} -> 중복된 숫자번호는 덮어씌워짐

    return min(len(HashDict), len(nums)//2)

 

 

레퍼런스

  • 정답 깃허브
 

GitHub - yyeongeun/codingtest: 코딩테스트 공부

코딩테스트 공부. Contribute to yyeongeun/codingtest development by creating an account on GitHub.

github.com

 

댓글