애플파이썬

[프로그래머스] Lv.2 귤 고르기 (파이썬) 본문

파이썬/프로그래머스

[프로그래머스] Lv.2 귤 고르기 (파이썬)

유진파이 2025. 3. 28. 14:45

https://school.programmers.co.kr/learn/courses/30/lessons/138476

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

문제 설명

경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 'k'개를 골라 상자 하나에 담아 판매하려고 합니다. 그런데 수확한 귤의 크기가 일정하지 않아 보기에 좋지 않다고 생각한 경화는 귤을 크기별로 분류했을 때 서로 다른 종류의 수를 최소화하고 싶습니다.

예를 들어, 경화가 수확한 귤 8개의 크기가 [1, 3, 2, 5, 4, 5, 2, 3] 이라고 합시다. 경화가 귤 6개를 판매하고 싶다면, 크기가 1, 4인 귤을 제외한 여섯 개의 귤을 상자에 담으면, 귤의 크기의 종류가 2, 3, 5로 총 3가지가 되며 이때가 서로 다른 종류가 최소일 때입니다.

경화가 한 상자에 담으려는 귤의 개수 k와 귤의 크기를 담은 배열 tangerine이 매개변수로 주어집니다. 경화가 귤 k개를 고를 때 크기가 서로 다른 종류의 수의 최솟값을 return 하도록 solution 함수를 작성해주세요.


제한사항
  • 1 ≤ k  tangerine의 길이 ≤ 100,000
  • 1 ≤ tangerine의 원소 ≤ 10,000,000

나의 풀이들...

def solution(k, tangerine):
    cum = 0
    tangerine.sort()
    sizes = list(set(tangerine))
    s_count = []
    for s in sizes:
        s_count.append(tangerine.count(s))
    s_count.sort(reverse=True)
    for i in range(len(s_count)):
        if cum < k:
            cum += s_count[i]
        else:
            return i
  • 1트 ! 테스트했을 때는 다 맞았는데 채점하니까 61점짜리 코드였다 ㅠㅠ (시간초과 + 틀린 답 조금)
  • 그래서 마지막에 계산해주는 부분을 조금 수정해봤다. 딱 맞게 계산될 때가 반영이 안되는 것 같았다.
def solution(k, tangerine):
    cum = 0
    tangerine.sort()
    sizes = list(set(tangerine))
    s_count = []
    for s in sizes:
        s_count.append(tangerine.count(s))
    s_count.sort(reverse=True)
    for i, c in enumerate(s_count):
        cum += c
        if cum >= k:
            return i+1
  • 2트 ! 82점짜리 코드... (틀린 답은 다 맞아졌지만 시간 초과가 여전히 뜬다...)
  • 딱 맞을 때도 정확하게 답이 나오게 됐고, i 부터 시작이기 때문에 i + 1 값을 return
from collections import Counter
def solution(k, tangerine):
    cum = 0
    count = Counter(tangerine)
    sorted_count = sorted(count.values(), reverse=True)
    for i, c in enumerate(sorted_count):
        cum += c
        if cum >= k:
            return i + 1
  • 3트 ! 아무래도 귤 종류별 갯수 셀 때 시간이 오래 걸린 거 같은데,, 도저히 어떻게 해결해야 되는지 ㅠㅠ
  • 근데 딕셔너리 쓰면 ! 속도가 빨라지는 거 같더라구용 ~
  • 일일히 구해주는 방법도 있지만 Counter라는 라이브러리가 있길래 사용해봤다
  • 굉장히 간편하구,, 코테에서도 쓸 수 있겠지 ~?!