프로그래머스__[문제풀이: lv2. 더맵게]

Jaewon Lee·2021년 8월 5일
0

Algorithm

목록 보기
17/36
post-thumbnail

On.


Algorithm


1. 수도코드

1) scoville를 for문으로 순회하여 heap에 push한다.

2) heap은 min-heap으로 제일 작은 값이 맨 앞에 온다.

3) while문으로 heap[0]가 주어진 K 지수보다 작을 경우에 계속 반복한다.

4) 스코빌 지수가 가장 낮은 두개를 꺼내기 위해서 heappop을 2번 진행하고, 꺼낸 값을 주어진 식으로 연산하여 다시 heap에 push한다.

5) 만약 heap에서 pop할 값이 남아 있지 않다면, -1을 리턴한다.

6) while 내부를 한번 돌 때 마다 answer에 1씩 더한다.

7) while 문이 끝나면 answer를 리턴한다.


2. 구현코드

import heapq

def solution(scoville, K):
    answer = 0
    heap = []
    for i in scoville:
        heapq.heappush(heap, i)
    
    while heap[0] < K:
        try:
            heapq.heappush(heap, heapq.heappop(heap) + ( heapq.heappop(heap) * 2 ))
        except:
            return -1
        answer += 1
        
    return answer

3. 배운 점

  • 실시간으로 정렬을 해서 최소값이나 최대값을 뽑아내야 하는 상황이 있다면 힙을 사용

  • heapify, heappush, heappop의 사용법과 max-hip 생성하는 방법

  • 인덱스, 런타임 에러는 try~except 구문으로 잡아주는 것이 파이써닉하다.



Off.


프론트와 백을 넘나드는 리드 개발자가 되는 그날까지 🔥🔥🔥

profile
Communication : any

0개의 댓글