프로그래머스 더 맵게

GGob2._.·2023년 4월 14일
0

algorithm

목록 보기
19/55

문제 설명

scoville 배열이 주어지고, K 값이 주어졌을 때 scoville 배열의 모든 원소가 K값을 넘도록

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

위의 식을 사용한다.


접근 방식

  • 최소 값을 자유 자재로 뽑기 위해 heap을 생각했고, heapq 라이브러리를 이용한다.

  • pythonheapq는 자연적으로 최소 힙을 구성하기 때문에, 첫 번째 원소가 K 이상인 경우 곧바로 정답을 리턴한다.

  • while문에서는 최소 값이 7 이하인 경우 & scoville의 길이가 2 이상인 경우를 만족해야 앞서 소개한 식을 적용할 수 있다.

  • scoville의 길이를 필터링 하는 것은 heappop() 과정에서 요소가 사라지는데, 이를 처리하지 않으면 비어있어도 heappop()을 수행하는 경우가 생길 수 있기 때문이다.

작성한 코드

import heapq
def solution(scoville, K):
    
    heapq.heapify(scoville)
    answer = 0
    
    if scoville[0] >= K: # 최소 값이 7 이상인경우
        return answer    # 리턴

    while scoville[0] < K: # 최소 값이 7 이하인 경우에만
        if len(scoville) <= 1: # 배열의 길이가 짧은 경우 
            return -1          # 리턴
        
        first = heapq.heappop(scoville)
        second = heapq.heappop(scoville)
    
        heapq.heappush(scoville, first+(second*2)) 
        answer += 1
    
    return answer
profile
소통을 잘하는 개발자가 되고 싶습니다.

0개의 댓글