algorithm/프로그래머스 문제

[프로그래머스 LV2] 더 맵게

장경훈 2022. 8. 8. 10:19
  [LV2] 더 맵게 문제링크
매운 것을 좋아하는 Leo는 모든 음식의 스코빌 지수를 K 이상으로 만들고 싶습니다. 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 Leo는 스코빌 지수가 가장 낮은 두 개의
www.programmers.co.kr

 

문제 해설

 

이번 문제는 heapq을 사용하여 최솟값을 항상 인덱스 0번에 위치시켜 조건에 맞는 식에 대입하여 다시 heapq에 넣어준 후 비교하면 되는 문제이다.

import heapq

def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville) # 주어지는 맵기 리스트 heapq형태로 변환
    
    while scoville[0] < K:
        tmp= heapq.heappop(scoville)+heapq.heappop(scoville)*2 #가장 작은 원소와 두번째로 작은 원소 추출 후 식에 대입
        heapq.heappush(scoville,tmp)#결과값 다시 heapq에 대입하기
        answer+=1 # 섞인 횟수 +1
        if len(scoville)==1: # 만약 원소가 1개만 남아있다면 반복문 종료
            break
    if scoville[0]<K: #모든 음식의 스코빌 지수를 K 로 못만들었다면 -1반환 
        answer=-1 
        
    return answer

 

Feedback

 

  • 처음에는 deque를 사용하여 풀려고 했으나 항상 최솟값이 가장 왼쪽에 있을 수 없다는 것을 생각 못함 
  • 계속된 최솟값을 구해야 하는 경우 heapq를 사용하여 구하는 것이 효율적이라는 것을 알게 되었다.