https://school.programmers.co.kr/learn/courses/30/lessons/1845
해시를 쓰는 문제라 해서 해시를 공부하는 겸 풀어보려 했는데.. 해시를 전혀 사용하지 않아도 풀리는 문제였다.
테스트케이스를 이용해 답이 나오는 과정을 생각해보자.
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)
'Algorithm > 코딩테스트 고득점 Kit' 카테고리의 다른 글
[고득점 Kit / 스택&큐] 기능개발 (0) | 2024.09.05 |
---|---|
[고득점 Kit / 스택&큐] 같은 숫자는 싫어 (0) | 2024.09.04 |
[고득점 Kit / 해시] 의상 (Counter, 리스트 컴프리헨션) (0) | 2024.09.02 |
[고득점 Kit / 해시] 전화번호 목록 (find, startswith, endswith) (0) | 2024.09.02 |
[고득점 Kit / 해시] 완주하지 못한 선수 (해시맵) (0) | 2024.09.01 |