코딩테스트 연습 > 연습문제
경화는 과수원에서 귤을 수확했습니다. 경화는 수확한 귤 중 '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 |