https://programmers.co.kr/learn/courses/30/lessons/1845
조합을 구해서 풀이 시 시간초과가 발생한다.
예를 들어 nums=[3,1,2,3]의 경우 set자료형으로 변환해주면 1,2,3을 가진다. 이때 N=4이므로 최대 2개까지 종류를 구할 수 있다. 따라서 2를 결과로 출력해준다.
nums=[3,3,3,2,2,2]의 경우 set자료형으로 변환해주면 2,3을 가진다. 이때 N=6이므로 최대 3개까지 종류를 구할 수 있다. 따라서 2를 결과로 출력해준다.
해당 내용을 코드로 옮기면 "정답 코드"와 같다.
시간초과 코드
from itertools import combinations
def solution(nums):
N=len(nums)
array=list(combinations(nums,N//2))
set_array=set(array)
#print(set_array)
result=0
for case in set_array:
visited=[]
for i in range(N//2):
if case[i] not in visited:
visited.append(case[i])
if len(visited)>=result:
result=len(visited)
return (result)
정답 코드
def solution(nums):
N=len(nums)
array=set(nums)
if len(array)>=N//2:
return N//2
else:
return len(array)
더 간단한 코드
def solution(nums):
return min(len(set(nums)), len(nums)//2)