[코딩테스트 연습] 폰켓몬

LeeEunJae·2022년 7월 27일
2

코딩테스트

목록 보기
1/4

문제 바로가기

def solution(nums):
    nums_list = list(nums)
    number_of_duplicates = {}
    for i in nums_list:
        number_of_duplicates[i] = nums_list.count(i)
    
    len_dict = len(number_of_duplicates)
    len_max = len(nums_list)//2
    return min(len_dict, len_max)

nums 배열에 있는 값 중 중복을 무시하기 위해서 딕셔너리에 값을 저장했다.
value 로는 중복 수를 넣었는데 이 문제를 해결하기 위해서 필요하지 않은 값이다. (코드를 작성하고 나니 왜 이렇게 했는지 모르겠다...ㅋㅋ)
최대로 가져갈 수 있는 폰켓몬의 수(len_max) 와 중복을 제외한 폰켓몬의 수(len_dict)를 비교해서 작은 값을 리턴하면 된다.

📌 간결하게 바꾼 코드

def solution(nums):
    return min(len(nums)//2, len(set(nums)))

중복을 무시하기 위해서 딕셔너리를 사용했는데 사실 set을 사용하면 되는 간단한 문제였다.

📌 set 자료형 사용방법

set 자료형은 집합에 관련된 것을 쉽게 처리하기 위한 자료형이다.
다음과 같이 set 키워드를 사용해서 만든다.

s1 = set([1,2,3])
s1
>>> {1, 2, 3}

문자열도 넣을 수 있다.

s2 = set("hello")
s2
>>> {'e', 'h', 'l', 'o'}

📌 집합 자료형의 특징

  • 중복을 허용하지 않는다
  • 순서가 없다.

중복을 허용하지 않기 때문에 중복을 제거하는 필터 역할로 종종 사용된다.
순서가 없기 때문에 인덱스 접근이 불가능하다. 하지만 리스트나 튜플로 변환시 인덱스 접근이 가능하다.

l1 = list(s1)
l1
>>> [1, 2, 3]
l1[0]
>>> 1

📌 교집합, 합집합, 차집합 구하기

  • 교집합
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
s1&s2
>>> {4, 5, 6}
s1.intersection(s2)
>>> {4, 5, 6}
  • 합집합
s1 | s2
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9}
s1.union(s2)
>>> {1, 2, 3, 4, 5, 6, 7, 8, 9}
  • 차집합
s1 - s2
>>> {1, 2, 3}
s1.difference(s2)
>>> {1, 2, 3}

📌 집합 자료형 관련 함수들

  • 값 1개 추가하기(add)
s1 = set([1,2,3])
s1.add(4)
s1
>>> {1, 2, 3, 4}
  • 값 여러개 추가하기(update)
s1 = set([1,2,3])
s1.update([4,5,6])
s1
>>> {1, 2, 3, 4, 5, 6}
  • 특정 값 제거하기(remove)
s1 = set([1,2,3])
s1.remove(2)
s1
>>> {1, 3}

👀 참고 자료 👀

https://wikidocs.net/1015

profile
매일 조금씩이라도 성장하자

0개의 댓글