본문 바로가기
코테

[python] 프로그래머스스쿨 더 맵게

by 상똥 2023. 12. 14.

코딩테스트 연습 - 더 맵게 | 프로그래머스 스쿨 (programmers.co.kr)

풀이
1. 리스트 scoville을 heapify를 사용해 힙으로 만들어준다
2. while 문을 사용해서 scoville[0]의 값이 K보다 작은 동안에만 가장 작은 값과 두 번째로 작은 값*2를 더한다
- heappush를 사용해서 더한다 
- 가장 작은 값 반환 동시에 삭제하기 위해 heappop을 사용한다
3. 만약 scoville의 값이 하나밖에 없다면, return -1
회고
- list인 scoville을 그대로 활용하고 싶어서 heapify를 사용했다 그냥 하면 안 됨 ㅜ ㅜ
- 고친 코드의 효율성이 조금! 더 좋아서 풀이를 고친 코드로 했고 코드는 그냥 같이 첨부한다
코드 (접은 글)

 

더보기

 고치기 전 코드

import heapq

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

 

고친 후의 코드

import heapq

def solution(scoville, K):

    heapq.heapify(scoville)
    
    answer = 0
    
    while scoville[0]<K:
        if len(scoville)==1:
            return -1
        heapq.heappush(scoville, heapq.heappop(scoville)+heapq.heappop(scoville)*2)
        answer+=1
    
    return answer
고치기 전 코드 고친 후의 코드