귤 고르기
풀이
귤이 많은 개수를 구하면 쉽게 풀릴 것이라 생각해서, 아래처럼 풀이를 해봤다.
딕셔너리 대신 리스트를 이용해서 풀어보았고, 제출했을 때, 꽤나 시간이 오래 걸려서 실패하나 싶었지만, 아슬하게 통과를 했다.
# 귤을 수확
# 'k'개를 골라 상자 하나에 담아 판매, 귤을 크기별로 분류, 서로 다른 종류의 수를 최소화
# [1, 3, 2, 5, 4, 5, 2, 3] 8개 중 6개의 귤이면, 1, 4 를 제외하면 2,3,5롷 서로 다른 종류가 최소
# {1:1, 2:2, 3: 2, 4: 1, 5:2}이니까
# 서로 다른 종류의 수의 최솟값을 return
def solution(k, tangerine):
numbers = [[i+1 , 0] for i in range(max(tangerine))]
for tan in tangerine:
numbers[tan-1][1] += 1
numbers = sorted(numbers, key = lambda x:x[1], reverse = True)
man_value = 0
for i in range(len(numbers)):
man_value += numbers[i][1]
if man_value >= k:
return i+1
다른 사람 풀이
collection.Counter를 이용해서 각 크기마다의 개수를 구했다.
그리고, for 문을 돌면서, cnt.values()로 정렬을 하되, 내림차순으로 정렬을 하고, 이 정렬로 나온 value리스트의 첫 값부터 마지막 값까지 순회를 한다.
k -= v를 통해 k의 개수가 0보다 작아졌을 때, 최소 크기 종류를 반환시키도록 하였다.
내가 푼 방식과 다르게 속도가 아주 랐다. 이런 collections.Counter를 이용하는 방법도 알아둬야겠다.
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
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv2 할인 행사(python) (0) | 2024.02.08 |
---|---|
프로그래머스 Lv2 피로도 (python) (0) | 2024.02.07 |
프로그래머스 Lv1 덧칠하기 (python) (1) | 2024.02.05 |
프로그래머스 Lv2 짝지어 제거하기 (python) (0) | 2024.02.05 |
프로그래머스 Lv2 멀리 뛰기 (python) (0) | 2024.02.04 |