728x90
https://programmers.co.kr/learn/courses/30/lessons/1845
굉장히 간단하게 풀 수 있는 문제인데 너무 어렵게 생각해서 시간 초과 왕창 맞았던 문제이다.
첫번째 시도 - 시간 초과 실패
from itertools import combinations as cb
def solution(nums):
answer = 0
result = []
for numb in cb(nums, int(len(nums)/2)) :
result.append(len(set(numb)))
answer = max(result)
return answer
nums의 길이는 항상 짝수이므로 2로 나눈 만큼의 조합으로 풀려고 combinations를 사용했었다.
나온 조합 중 요소들의 중복을 제거하기 위해 set을 사용했고 그 길이들을 전부 result라는 빈 리스트에 담아서 그 중 가장 큰 수를 answer로 뽑았는데 for문을 돌면서 불필요한 반복이었는지 시간이 굉장히 오래 걸렸고
당연히 시간 초과가 왕창 떴다.
for문을 사용하지 않고 같은 로직으로 풀 수 있는 방법을 생각해봤는데 생각보다 너무 간단해서 허무했다...
두번째 시도 - 성공
def solution(nums):
answer = 0
num_len = len(set(nums))
result = int(len(nums)/2)
if result < num_len :
answer = result
else :
answer = num_len
return answer
최대한 많은 종류의 포켓몬을 선택하고자 하기 때문에 for문을 생각하지 않고 그냥 set으로 중복을 제거하여 종류가 겹치지 않도록 해주면 되었다.
그 후 nums의 길이를 2로 나눈 값과 set으로 중복을 제거한 nums의 길이를 비교하여 답을 구할 수 있었다.
가끔은 쉬운 문제임에도 어렵게 생각하는 것 보다 직관적으로 생각하는 것도 중요한 것 같다 :(
728x90