Python

우선순위 큐 heapq

justhash 2025. 4. 5. 21:52

프로그래머스 연습문제 풀이 중 문제 해결

 

https://school.programmers.co.kr/learn/courses/30/lessons/12927#

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

어지간한 테스트케이스 다 제대로 나오는데 제출만 하면 틀리길레 오기로 찾아봄.

그 결과 왜인진 모르겠지만 heapq의 불안정성이 좀 있는듯?

heapq.heapify() 메소드 사용하면 heapq.sort()의 불변성이 생긴다고 함.

코드 참조

```python
import heapq

"""
heapq 이용
"""
def minimize(w,n):
    mw = [-i for i in w]
    """
    heapify 함수로 list -> heap 전환
    : heap.sort의 불변성 유지
    """
    heapq.heapify(mw)
    # print(type(mw))
    # print(mw)
    # wi = heapq.heappop(mw)
    # heapq.heappush(mw, wi)
    # print(mw)
    rn = n
    while rn>0:
        # print(mw)
        wi = heapq.heappop(mw)
        wi+=1; rn+=-1
        heapq.heappush(mw, wi)
        # if rn==0:
        #     break
    return mw

"""
무지성 sort 이용
"""
# def minimize(w,n):
#     w.sort(reverse=True)
#     # wi = heapq.heappop(mw)
#     # heapq.heappush(mw, wi)
#     # print(mw)
    
#     rn = n
#     while rn>0:
#         # print(mw)
#         w.sort(reverse=True)
#         w[0]-=1
#         rn+=-1
        
#         # if rn==0:
#         #     break
#     return w
        

def solution(n, works):
    if sum(works)<=n:
        answer = 0
    else:
        mw = minimize(works, n)
        sum_s = 0
        for mwi in mw:
            sum_s += mwi*mwi
        answer = sum_s
        print(mw)
    # print(answer)
    return answer