귤 고르기

이정연·2023년 1월 5일
0

CodingTest

목록 보기
105/165

문제 링크

해설

  • 이 문제는 그리디로 접근해야 한다. 왜냐하면 귤의 사이즈 중에서 개수가 많은 것을 우선 순위로 선택해야 하기 때문이다.
  • 귤의 사이즈별 개수를 어떻게 파악할까?
  • 해시 자료구조를 이용하면 {사이즈: 개수} 형식으로 정리를 할 수 있다.
  • 개수가 많은 것을 우선순위로 선택한다는 점을 이용하여 최대힙을 떠올렸다.
  • 왜냐하면 최대힙은 pop을 하게 되면 항상 max값을 뽑아주기 때문이다.
  • 초기 구상은 그렇게 pop을 하여 모아놓은 size 집합으로 중복을 제거하여 총 몇 종류의 size가 나올 수 있는지를 구하려고 했다.
  • 그러나 size는 어차피 중복이 안 되므로 굳이 집합 자료구조를 사용하지 않고 누적차로 풀었다.

CODE

import heapq as h
from collections import defaultdict
def solution(k, tangerine):
    answer = 0
    size_cnt = defaultdict(int)
    max_heap = []
    for t in tangerine:
        size_cnt[t] += 1
    for key in size_cnt:
        h.heappush(max_heap,(-1*size_cnt[key],-1*key))
    while k > 0:
        answer += 1
        k -= -1*h.heappop(max_heap)[0]
    return answer
profile
0x68656C6C6F21

0개의 댓글