[프로그래머스/파이썬] Level 1 폰켓몬

bye9·2021년 4월 10일
0

알고리즘(코테)

목록 보기
106/130

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)

0개의 댓글