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 키워드를 사용해서 만든다.
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}
s1 = set([1,2,3])
s1.add(4)
s1
>>> {1, 2, 3, 4}
s1 = set([1,2,3])
s1.update([4,5,6])
s1
>>> {1, 2, 3, 4, 5, 6}
s1 = set([1,2,3])
s1.remove(2)
s1
>>> {1, 3}