[프로그래머스] LV2. 귤 고르기 (파이썬, Python)

2026. 5. 28. 20:42·Algorithm Solving

 

 

 

문제 링크

 

 

구분

코딩테스트 연습 > 연습문제

 

 

문제 설명

경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 '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

입출력 예
k tangerine result
6 [1, 3, 2, 5, 4, 5, 2, 3] 3
4 [1, 3, 2, 5, 4, 5, 2, 3] 2
2 [1, 1, 1, 1, 2, 2, 2, 3] 1

입출력 예 설명

입출력 예 #1

  • 본문에서 설명한 예시입니다.

입출력 예 #2

  • 경화는 크기가 2인 귤 2개와 3인 귤 2개 또는 2인 귤 2개와 5인 귤 2개 또는 3인 귤 2개와 5인 귤 2개로 귤을 판매할 수 있습니다. 이때의 크기 종류는 2가지로 이 값이 최소가 됩니다.

입출력 예 #3

  • 경화는 크기가 1인 귤 2개를 판매하거나 2인 귤 2개를 판매할 수 있습니다. 이때의 크기 종류는 1가지로, 이 값이 최소가 됩니다.

 

 

 

 

문제 풀이

문제를 보니 딕셔너리가 떠올랐다. 다만 딕셔너리 "값"을 기준으로 정렬하는 방법을 몰라서 인터넷을 참고했다.

람다 구문을 통해 값을 기준으로 손쉽게 내림차순 정렬이 가능했다.

sorted_dict = sorted(dict.items(), key = lambda item:item[1], reverse=True)을 기억하자!

def solution(k, tangerine):
    # 귤을 크기별로 분류해서, 서로 다른 종류의 수를 최소화
    # k는 한 상자에 담으려는 개수, 결과는 종류의 최솟값
    # 귤이 가장 많은 크기 순으로 
    
    answer = 0
    dict = {}
    tangerine.sort()
    
    for t in tangerine:
        if t in dict:
            dict[t] += 1
        else :
            dict[t] = 1
    
    sum = 0
    sorted_dict = sorted(dict.items(), key = lambda item:item[1], reverse=True)
    for d in sorted_dict:
        if sum >= k:
            return answer
        
        sum += d[1]
        answer += 1
       
    return answer

 

 

 

 

 

다른 사람 풀이 참고

이 분은 카운터를 사용해서 풀이했다.

카운터란? 리스트 안의 원소 개수를 자동으로 세주는 딕셔너리

cnt = collections.Counter(tangerine) 한 줄로 귤 개수를 다 셀 수 있다는 것을 배웠다.

나의 경우에는 += 를 했지만, 이 분은 -=를 해서 k를 비교했다.

import collections
def solution(k, tangerine):
    answer = 0
    cnt = collections.Counter(tangerine)

    for v in sorted(cnt.values(), reverse = True):
        k -= v
        answer += 1
        if k <= 0:
            break
    return answer

'Algorithm Solving' 카테고리의 다른 글

[프로그래머스] LV2. 멀리 뛰기 (파이썬, Python)  (0) 2026.05.31
[프로그래머스] LV2. 괄호 회전하기 (파이썬, Python)  (0) 2026.05.30
[프로그래머스] LV2. 카펫 (파이썬, Python)  (0) 2026.05.28
[프로그래머스] LV2. 짝지어 제거하기 (파이썬, Python)  (0) 2026.05.27
[프로그래머스] LV2. 구명보트 (파이썬, Python)  (0) 2026.05.23
'Algorithm Solving' 카테고리의 다른 글
  • [프로그래머스] LV2. 멀리 뛰기 (파이썬, Python)
  • [프로그래머스] LV2. 괄호 회전하기 (파이썬, Python)
  • [프로그래머스] LV2. 카펫 (파이썬, Python)
  • [프로그래머스] LV2. 짝지어 제거하기 (파이썬, Python)
아기꼬래
아기꼬래
  • 아기꼬래
    아꼬의 개발 일지
    아기꼬래
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • 프로젝트 및 공모전 (4)
        • Oracle 프로젝트 (3)
      • Algorithm Solving (26)
      • SQL (9)
      • Data Analysis (12)
      • AI (0)
      • FastAPI (0)
      • Spring Boot (0)
      • Oracle (1)
      • AWS (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    미래내일 일경험
    data analysis
    오라클 프로젝트
    SQL
    Oracle 프로젝트
    일경험
    파이썬
    시각화
    python
    Oracle 일경험
    Algorithm
    Tableau
    Algorithm Solving
    태블로
    Oracle
    프로그래머스
    한국오라클
    일경험 프로젝트
    데이터시각화
    coding test
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
아기꼬래
[프로그래머스] LV2. 귤 고르기 (파이썬, Python)
상단으로

티스토리툴바