https://programmers.co.kr/learn/courses/30/lessons/1845
현재 존재하는 폰켓몬의 종류와 갯수를 알려주는 nums 배열이 주어지고, 갯수가 N개라고 할 때, N/2개 만큼 가질 수 있다. 이때 제일 다양하게 가질 수 있는 갯수를 return 하도록 한다.
미리 arr이라는 변수의 list를 만들어 놓고, for문을 돌며 list의 in 함수로 새로운 종류의 폰켓몬을 찾도록 하였다. 그리고 특정 길이(N/2) 이상이라면 break하도록 하는 분기문을 생성하였다.
def solution(nums):
arr = []
length = len(nums)
for i in range(length):
if nums[i] not in arr:
arr.append(nums[i])
if len(arr) >= length/2:
break
return len(arr)
항상 대단한 풀이는 존재하는것 같다. min함수와 set함수를 사용하여 간단하게 풀 수 있었다.
📍 set 함수
'set'이라는 이름에서 알수 있듯이, 집합 자료형이다.
따라서 다음과 같은 특징을 가진다.
1. 순서가 존재하지 않는다. ➡ 인덱싱 불가
2. 중복된 값을 가지지 않는다.
3. 값의 변경 가능
+) 집합 자료형이라서 그런지 일반적인 자료형처럼 추가/삭제등의 메소드 외의 교집합/합집합/차집합등의 집합의 연산을 할 수 있는 메소드도 존재한다.
내 풀이는 list의 in을 사용했지만 set을 사용하면 한번에 주어진 폰켓몬 배열을 중복없이 만들 수 있다. 이렇게 구한 set 형식의 길이와 최대로 구할 수 있는 N/2를 비교하면 바로 문제를 풀 수 있다.
def solution(ls):
return min(len(ls)/2, len(set(ls)))
set을 사용한것도 놀랍지만 무엇보다 min을 사용했다는 점이 제일 놀라웠다. 생각해보면 어차피 가장 큰 값은 N/2일테니까 굳이 비교하지 않아도 될테데... min함수를 더욱 적극적으로 활용해봐야겠다~