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