Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

ol-rlo-zl

[프로그래머스 lv2] 더 맵게 - 힙(heap) - 파이썬(Python) 본문

카테고리 없음

[프로그래머스 lv2] 더 맵게 - 힙(heap) - 파이썬(Python)

ol-rlo-zl 2023. 4. 4. 14:10

문제

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

시행착오 (list 이용)

83.9점 - 정확성 테스트 통과, 효율성 테스트 실패(시간초과)

def solution(scoville, K):
    cnt = 0
    while min(scoville) < K:
        if len(scoville) == 1:
            return -1
        scoville.sort()
        scoville.append(scoville[0]+scoville[1]*2)
        scoville = scoville[2:]
        cnt += 1
    return cnt

정답 (heapq 이용)

list를 이용할 때와 같은 풀이방식이지만, heapq를 이용하면 더 효율적이다.

import heapq
def solution(scoville, K):
    cnt = 0
    heapq.heapify(scoville)
    while scoville[0] < K:
        if len(scoville) == 1:
            return -1
        heapq.heappush(scoville, heapq.heappop(scoville) + heapq.heappop(scoville) * 2)
        cnt += 1
    return cnt

설명

import heapq : 부모 노드의 키 값 >= 자식 노드의 키 값 인 최소힙(min heap) 내장모듈

heapq.heapify(scoville) : 주어진 scoville(리스트)을 힙 자료구조로 변환

heapq.heappush(scoville, item) : scoville(힙)에 item을 추가

heapq.heappop(scoville) :  scoville(힙)에서 가장 작은 원소를 제거 + 반환

scoville[0] : scoville(힙)에서 가장 작은 원소를 제거하지 않고 반환

결과