Posts [알고리즘] 프로그래머스 - 더 맵게
Post
Cancel

[알고리즘] 프로그래머스 - 더 맵게


문제

주어지는 모든 음식의 스코빌 지수를 K이상으로 만들기 위해
스코빌 지수가 가장 낮은 음식 두 개를 섞어서 새로운 음식을 만든다.
모든 음식의 스코빌 지수가 K 이상이 되도록 만들자.
\(스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2)\)
음식들의 스코빌 지수를 담은 배열 : scoville
원하는 스코빌 지수 : K
scoville의 길이는 1이상 1,000,000 이하
K는 0이상 1,000,000,000 이하
scoville의 원소는 각각 0이상 1,000,000 이하
모든 음식의 스코빌 지수를 K이상으로 만들수 없는 경우 -1


입출력 예시

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


접근

힙을 이용하면 간단하게 구현할 수 있다.
가장 작은 음식 두개를 힙에서 꺼내고, 스코빌 지수 연산을 한 후 다시 힙에 넣는다.
이 과정을 힙에서 꺼낸 값이 K보다 커질 때 까지 반복하면 된다.
힙이 빌 때까지 반복하게 된다면 조건을 만족할 수 없으므로, -1을 리턴한다.


코드

  • 파이썬 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import heapq

def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)

    while True:
        minItem = heapq.heappop(scoville)
        if minItem >= K:
            break
        if len(scoville) < 1:
            answer = -1
            break
        newItem = heapq.heappop(scoville) * 2 + minItem
        heapq.heappush(scoville, newItem)
        answer += 1        

    return answer


This post is licensed under CC BY 4.0 by the author.

[프로그래머스 인공지능스쿨] Week1-4 파이썬 기초

[알고리즘] 프로그래머스 - N으로 표현