[프로그래머스] 더 맵게 (Heap)

zunzero·2022년 8월 23일
0

알고리즘(파이썬)

목록 보기
28/54

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

프로그래머스 코딩테스트 연습의 힙 챕터 문제이다.
요구사항은 배열의 최소값이 특정 값 이상이 될 때까지 특정 계산을 몇 차례 해야하는 지를 구해야 하는 문제이다.

이 때, 특정 계산에는 배열의 첫 번째와 두 번째 최소값이 필요하다.
맨 처음 문제를 풀었을 때는, 배열의 최소값이 특정 값 이상이 될 때까지 배열을 정렬하는 로직을 실행시켰다.
즉, 계산 수행 후 값을 다시 배열에 넣었을 때, 요구사항을 만족하지 않는다면 배열을 정렬해서 다시 최소값 2개를 찾아 계산을 수행했던 것이다.

이는 시간초과 판정이 났다.
매번 정렬을 진행하기에는 시간이 오래 걸렸던 것이었다.

시간적인 문제를 해결하기 위해, 원소를 삽입할 때와 꺼낼 때 힙 자료구조를 사용하였다.

import heapq


def solution(scoville, K):
    heap = []
    for num in scoville:
        heapq.heappush(heap, num)

    answer = 0
    while heap[0] < K:
        try:
            heapq.heappush(heap, heapq.heappop(heap) + heapq.heappop(heap) * 2)
        except IndexError:
            return -1
        answer += 1
    return answer
profile
나만 읽을 수 있는 블로그

0개의 댓글