[Python/프로그래머스] 귤 고르기

Sujin Lee·2022년 12월 14일
0

코딩테스트

목록 보기
169/172
post-thumbnail
post-custom-banner

문제

프로그래머스 - 귤 고르기

해결 과정

  1. 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화
    = 중복되는 수가 많은 것부터 판매한다.
  2. Counter를 사용해서 귤 크기별로 몇 개 있는지 확인하기
    Counter({3: 2, 2: 2, 5: 2, 1: 1, 4: 1})
  3. 키와 값을 튜플로 갖는 리스트를 값을 기준으로 내림차순 정렬하기
    list(count.items()) = [(1, 1), (3, 2), (2, 2), (5, 2), (4, 1)]
  4. for문을 이용해서 k개를 팔 때 서로 다른 귤의 종류의 개수 구하기
    k에서 가장 많은 개수를 가지고 있는 귤부터 내림차순으로 뺀다.
    그리고 answer(귤의 종류)에 1을 더해준다.
    만일 k가 0이거나 음수가 되면 반복문을 멈춘다.

풀이

from collections import Counter
def solution(k, tangerine):
    answer = 0
    
    # Counter({3: 2, 2: 2, 5: 2, 1: 1, 4: 1})
    count = Counter(tangerine)
    new_list = sorted(list(count.items()), key = lambda x:x[1], reverse = True)
    
    for i in new_list:
        k -= i[1]
        answer += 1
        
        if k <= 0: 
            break
            
    return answer

시행착오

  • 완전히 꽝은 아닌,, 하지만 시간초과 꽝 (〃⌒▽⌒〃)ゝ
from collections import Counter
def solution(k, tangerine):
    type = []
    counter = Counter(tangerine)
    new_list = sorted(list(counter.elements()),key = lambda x:list(counter.elements()).count(x),reverse = True)
    
    for i in range(k):
        if new_list[i] not in type:
            type.append(new_list[i])
            
    return len(type)
  • 어떤 조건을 빠트렸을까?
from collections import Counter
def solution(k, tangerine):
    answer = 0
    type = 0
    count = Counter(tangerine)
    new_list = sorted(list(count.items()), key = lambda x:x[1], reverse = True)
    for i in new_list:
        if i[1] < k:
            if answer < k:
                answer += i[1]
                type += 1
            elif answer == k:
                break
            elif answer > k:
                type += 1
                break
        else:
            type += 1
            break
    return type
profile
공부한 내용을 기록하는 공간입니다. 📝
post-custom-banner

0개의 댓글