티스토리 뷰

728x90
반응형

문제

https://programmers.co.kr/learn/courses/30/lessons/1845?language=python3 

 

코딩테스트 연습 - 폰켓몬

당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다.

programmers.co.kr

 

코드

from itertools import combinations
def solution(nums):
    answer = 0
    result=list(combinations(nums,len(nums)//2))
    for i in result:
        demo = [0] * (max(nums)+1)
        for j in i:
            demo[j] = 1
        if answer < sum(demo):
            answer = sum(demo)
    return answer

조합을 이용해 풀려했는데 시간초과;

 

set으로 푸는 코드

def solution(nums):
    answer = 0
    leng = len(set(nums))
    if len(nums) // 2 > leng:
        return leng
    else:
        return len(nums) // 2

set을 사용해 중복값을 제거해주면 인형의 종류 수가 된다.

 

인형을 가져가도 되는 숫자인 N/2마리 보다 종류가 작은 경우에는 답이 무조건 set을 제거한 leng(종류)이 된다.

왜냐하면 아무리 많이 가져갈 수 있어도 종류 수가 가져갈 수 있는 수보다 작기 때문이다.

 

만약 leng(종류)이 N/2마리 보다 클 경우에는 답이 N/2마리가 된다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31