nums에서 len(nums)/2 만큼의 수를 랜덤으로 조합하고
리스트에 저장해서 종류가 가장 많은 것 출력
def solution(nums):
from itertools import combinations as cb
tmp = []
n = len(nums)//2
nums = list(set(nums))
if len(nums) < n: # 뽑아야하는 폰켓몬의 수가 중복되지 않는 폰켓몬의 수보다 크면
picks = list((cb(nums, len(nums))))
else: # 중복되지 않는 폰켓몬의 수가 뽑아야하는 수보다 더 크면
picks = list(((nums, n)))
[tmp.append(len(set(pick))) for pick in picks]
return(max(tmp))
nums에서 set으로 중복 비허용했지만 테스트 케이스 7, 12, 13, 16에서 시간초과
질문하기에서 나와 똑같이 시간초과로 안되는 게시글이 있어, 문제를 다시 읽고 생각해보니 ! 어차피 나올 수 있는 종류의 최대값은 len(nums)//2 !
nums를 받고 새로 set(nums)의 변수를 만든 후
뽑아야하는 폰켓몬의 수 < 중복되지 않은 폰켓몬의 수이면
뽑아야하는 폰켓몬의 수 출력 (예제 1,2)
만약 뽑아야하는 폰켓몬의 수 > 중복되지 않은 폰켓몬의 수(n > len(nums)) 이면 중복되지 않은 폰켓몬의 수(len(nums)) 출력 (예제 3)
def solution(nums):
n = len(nums)//2
nums = list(set(nums))
return n if len(nums) > n else len(nums)
def solution(ls):
return min(len(ls)/2, len(set(ls)))
그렇지..어차피 둘 중 작은 것 출력하면 되니까..!