오늘은 파이썬의 Counter를 사용해서 문제를 해결해보았다.
https://school.programmers.co.kr/learn/courses/30/lessons/138476
수확한 귤의 크기가 리스트 tangerine에 담겨온다. 이중에서 k개의 귤을 한 상자에 골라내려 한다. 단, 귤 크기의 종류가 최소가 되게 하고 싶을 때, 귤 크기 종류의 수를 return해라.
1 ≤ k ≤ tangerine의 길이 ≤ 100,000
1 ≤ tangerine의 원소 ≤ 10,000,000
문제를 보자마자 시간 복잡도는 일단 차치하고 파이썬 자료구조 중 Counter를 사용하면 간단하게 문제가 풀리지 않을까 생각했다.
Counter를 import 해준다. tangerine을 Counter로 선언해준다.
most_common()
함수는 카운터에서 가장 빈도가 높은 요소들을 빈도와 함께 튜플 형태로 반환해준다. 파라미터로 int값을 넣으면 상위 몇가지만 알려주지만 이 문제에선 다 아는게 더 풀기 쉬워 파라미터 없이 진행했다.
해당 리스트를 for n, f in most_common:
으로 순회해서 k값에서 빼주면서 종류를 카운트하면 완료!
만약 카운터를 쓰지않으면 dict를 만들어 tangerine을 순회하면서 freqent를 측정해주는 방식으로 진행하면 된다.
from collections import Counter
def solution(k, tangerine):
answer = 0
c = Counter(tangerine)
most_common = c.most_common()
for n, f in most_common:
if k > 0:
answer += 1
k -= f
return answer