폰켓몬

ChoiDevv·2023년 1월 6일
0

풀이

def solution(nums):
    answer = 0

    if len(set(nums)) >= len(nums) // 2:
        answer = len(nums) // 2
    else:
        answer = len(set(nums))

    return answer

의도

문제를 처음 봤을 때 아무리 봐도 반복문을 돌리면 시간 초과가 날 것이 보였다. 그렇기 때문에 공통점을 찾기 시작했고 문제에서 절반만 가져라는 지문을 보고 대강 길이를 통해서 값을 만들어 내야함을 눈치챌 수 있었다.

가장 먼저 생각한 것은 집합이었고 set 처리한 리스트의 길이가 기존의 주어진 리스트의 길이보다 크거나 같으면 주어진 리스트의 절반이 공통된 걸 찾았다. 그리고 예외인 경우가 작을 경우였는데 이에 대해서는 처음에 len(nums) // 2 - 1로 했었다.

그러니 에러가 났고 뭐가 문제인지 다시 접근해 [1, 1, 1, 1, 2, 2, 2, 2] 의 경우를 생각해봤다. 그 결과, 나는 이 부분에서는 경우의 수를 따지고 있었다. 어차피 최대로 가져갈 수 있는 종류는 1과 2 두 개 뿐인데 [1, 1, 1, 2], ... 이런 식으로 생각하고 있었더라. 그래서 집합처리한 걸 리턴해주는 것으로 변경하니 해결했다.

다른 풀이

def solution(ls):
    return min(len(ls)/2, len(set(ls)))
profile
기억보단 기록을

0개의 댓글