본문으로 바로가기

[프로그래머스] 더 맵게

category ps/자료구조 2021. 12. 20. 19:52
Categoryps/자료구조
Tag자료구조
Tagsheap
난이도level 2
메모heap 기본
발행 여부
사이트프로그래머스
이해완벽히 이해
최종 편집 일시
푼 날짜

문제 해설 및 주의사항

원문

문제 설명

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

섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)

Leo는 모든 음식의 스코빌 지수가 K 이상이 될 때까지 반복하여 섞습니다.

Leo가 가진 음식의 스코빌 지수를 담은 배열 scoville과 원하는 스코빌 지수 K가 주어질 때, 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성해주세요.

제한 사항

  • scoville의 길이는 2 이상 1,000,000 이하입니다.
  • K는 0 이상 1,000,000,000 이하입니다.
  • scoville의 원소는 각각 0 이상 1,000,000 이하입니다.
  • 모든 음식의 스코빌 지수를 K 이상으로 만들 수 없는 경우에는 -1을 return 합니다.

입출력 예

scovilleKreturn
[1, 2, 3, 9, 10, 12]72

주의사항


풀이

  • 지수가 가장 낮은 두 개의 음식을 섞는다(pop). 섞은 후 섞은 음식을 다시 넣는다(push).
    • 최솟값을 pop 하고 push 하는 것을 빠르게 할 수 있는 자료형 heapq를 활용해 볼 수 있겠다.

내 풀이 코드

import heapq
def solution(scoville, K):
    answer = 0
    # heapify
    heapq.heapify(scoville)
    # 최솟값이 K 이상이 아닐 때 까지
    while scoville and scoville[0] < K:
        first = heapq.heappop(scoville)
        if not scoville:
            return -1
        second = heapq.heappop(scoville)
        heapq.heappush(scoville, (first + second * 2))
        answer += 1
        
    return answer

풀이 코드

py

퇴고

반응형