STUDY/Algorithm

[프로그래머스] LEVEL2 더맵게, python3, 힙,Heap

sinawi95 2019. 11. 6. 10:34
728x90

1차 시도


def solution(scoville, K):
    answer = 0
    while True:
        scoville.sort()
        if scoville[0]==0 and scoville[1]==0:
            return -1
        min1=scoville.pop(0)
        min2=scoville.pop(1)
        mixed=min1+min2*2
        scoville.insert(0,mixed)
        answer+=1
        if min(scoville)>=K:
            break
    return answer


Heap에 관한 설명

https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html

 

[자료구조] 힙(heap)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

https://gmlwjd9405.github.io/2018/05/10/algorithm-heap-sort.html

 

[알고리즘] 힙 정렬(heap sort)이란 - Heee's Development Blog

Step by step goes a long way.

gmlwjd9405.github.io

Python에서 Heap은 MinHeap

힙에 원소 추가 heappush()
힙에서 원소 삭제 heappop()
기존 리스트를 힙으로 변환 heapify()

https://www.daleseo.com/python-heapq/

 

[파이썬] heapq 모듈 사용법

데이터를 정렬된 상태로 저장하기 위해서 사용하는 파이썬의 heapq(힙큐) 내장 모듈에 대해서 알아보겠습니다. 힙 자료구조heapq 모듈은 이진 트리(binary tree) 기반의 최소 힙(min heap) 자료구조를 제공합니다.자바에 익숙하신 분이라면 PriorityQueue 클래스를 생각하시면 이해가 쉬우실 것 같습니다. min heap을 사용하면 원소

www.daleseo.com


2차시도

import heapq
def solution(scoville, K):
    answer = 0
    heapq.heapify(scoville)
    while True:
        if scoville[0]==0 and scoville[1]==0:
            answer=-1
            break
        min1=heapq.heappop(scoville)
        min2=heapq.heappop(scoville)
        heapq.heappush(scoville,min1+min2*2)
        answer+=1
        if scoville[0]>=K:
            break
    return answer


3차시도

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

while문을 빠져나오는 조건이 가장 작은원소와 두번째로 작은 원소만 체크해서 더했을때 계속 0이 나오는 경우 인줄 알았는데 잘못된 조건이었다. 두개 0으로 더해도 그다음원소가 0이 아닌이상 값이 계속 더해진다.

원소가 하나 남았을때 K를 못넘기면 빠져나오게 했다.