국문과 유목민

(Week1)[Heap] 더 맵게 본문

알고리즘_코딩테스트/주간코딩 스터디 (주코스)

(Week1)[Heap] 더 맵게

논곰 2022. 6. 20. 15:01

주간 코딩스터디 때 푼 문제들을 정리하고 있습니다. 구체적인 문제에 대한 정보는 게시글 내 링크를 살펴봐주세요

소요시간: 20분

1. 문제 설명

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

 

코딩테스트 연습 - 더 맵게

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

programmers.co.kr

모든 음식의 스코빌 지수를 K이상으로 만들기 위해 음식을 섞으려고 할 때, 최소 횟수를 구하는 문제

2. 접근 방식

  • 문제에서 주어진 리스트의 길이가 2 이상 1,000,000이하로 주어지기 때문에  시간 복잡도가 있을 것이라고 생각
  • 주어진 리스트가 매번 순서대로 정렬되어야 한다는 점에서 heap을 사용하기로 함.

3. 코드

import heapq

def solution(scoville, K):
    heap_ls, count = [], 0
    for i in scoville:
        heapq.heappush(heap_ls, i)
    while heap_ls:
        node = heapq.heappop(heap_ls)
        if node > K or len(heap_ls) == 0:
            break
        next_node = heapq.heappop(heap_ls)
        mul_scov = node + (next_node*2)
        heapq.heappush(heap_ls, mul_scov)
        count +=1
    return count if node > K else -1

4. 코멘트

  • Heapq를 활용해 Heap을 구현하는데, 오랜만에 사용하다보니 사용법에 익숙하지 않아서다시 한 번 검색했었다. Heapq는 리스트를 생성하고, heapq.heappush와 heapq.heappop으로 입력과 출력을 진행한다.