'힙'에 해당하는 글 1건

programmers.co.kr/learn/courses/30/lessons/42626

 

코딩테스트 연습 - 더 맵게

매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의 음식을 아래와 같

programmers.co.kr

 

[코테리뷰]

문제 접근

  • 가장 작은 두 개의 지수를 이용해서 새로운 지수로 바꿔주고, 모든 값이(스코피 지수가) K보다 커질 때까지 걸리는 횟수를 구해준다.

  • 효율성 문제 : heapq를 이용하여 최솟값을 보다 빨리 찾을 수 있다.

Heapq 이용 시 알아야 할 3가지

  1. heapq로 만들어주기 : heapq.heapify(리스트명)

    • 결과 : 해당 리스트가 heap으로 바뀐다.
  2.  heapq에 원소출력하기 : heapq.heappop(힙명)

    • 결과 : 해당 힙의 원소 중 최솟값이 pop된다.
  3.  heapq에 원소 입력하기 : heaq.heappush(힙명, 원소값)

    • 결과 : 해당 힙에 원소값이 추가된다.

내 코드

import heapq


def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)  # 리스트 -> 힙큐로 바꿔준다 :):)

    while scoville:
        answer += 1

        new = heapq.heappop(scoville)  # 가장 작은 값이 꺼내진다.(힙의 이름 명시하는 것 잊지 말기)
        if not scoville:
            return -1
        new += heapq.heappop(scoville) * 2
        heapq.heappush(scoville, new)
        smallest = heapq.heappop(scoville)
        if smallest >= K:
            break
        else:
            heapq.heappush(scoville, smallest)

    return answer

WRITTEN BY
choco-songyi

,