알고리즘/programmers[2]

[프로그래머스] 더 맵게: python3

fladi 2022. 1. 27. 16:25
728x90
import heapq as hq

def solution(s, K):
    answer = 0 
    hq.heapify(s)
    
    while s[0] < K:
        if len(s) == 1:
            return -1
        
        answer += 1
        mix = hq.heappop(s)+2*hq.heappop(s)
        hq.heappush(s, mix)
    
    return answer

<내 풀이 분석>

리스트의 최소값을 얻기 쉽고, 정렬도 자동으로 해주는 heapq모듈(최소힙)을 사용하였다.

answer: 섞은 횟수/ s: 최소 힙

 

1. s를 heap으로 만들어준다(heapify)

2. s의 최소값(s[0])이 K이상이 될 때까지 while문을 만복한다.

   만약 s가 한 개 남았는데도 조건을 만족하지 못한다면 몇 번을 섞어도 K이상으로 만들 수 없는 것 => -1을 반환

   최소값과 두 번째로 작은 값을 뽑아 mix하여(식에 대입) 힙에 다시 넣어준다.

3. answer를 반환

728x90