본문 바로가기

Algorithm/코딩테스트 고득점 Kit

[고득점 Kit / 해시] 폰켓몬

https://school.programmers.co.kr/learn/courses/30/lessons/1845

 

프로그래머스

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

programmers.co.kr

 

해시를 쓰는 문제라 해서 해시를 공부하는 겸 풀어보려 했는데.. 해시를 전혀 사용하지 않아도 풀리는 문제였다.

 

테스트케이스를 이용해 답이 나오는 과정을 생각해보자.

 

nums = [3, 1, 2, 3]

norep = [1, 2, 3]

n = 2 (선택가능한 폰켓몬 수)

result = 2

 

중복을 제거한 리스트인 norep의 리스트의 크기와 n을 비교했을 때, 작거나 같은 쪽이 그냥 답이 된다..

진짜 그럴까? 의심되면 다른 테스트케이스도 확인해보자.

 

nums = [3, 3, 3, 2, 2, 4]

norep = [2, 3, 4]

n = 3 (선택가능한 폰켓몬 수)

result = 3

 

norep의 크기와 n의 값이 같으므로 그냥 n이 답이다. (또는 norep의 크기)

 

극단적인 경우를 한번 더 확인해보자.

 

nums = [3, 3, 3, 3, 3, 2, 2, 2, 2, 2]

norep = [2, 3]

n = 5 (선택가능한 폰켓몬 수)

result = 2

 

이경우도 역시 norep의 크기와 n을 비교했을 때 더 작은 쪽이 답이다.

 

따라서, 이 논리를 가지고 코드를 작성하면 된다.

 

def solution(nums):
    norep = set(nums)
    n = len(nums) // 2

    if len(norep) >= n:
        return n
    else:
        return len(norep)