오구의코딩모험

[Python] 더 맵게 본문

프로그래밍 공부/프로그래머스

[Python] 더 맵게

오구.cpp 2022. 12. 30. 21:55
반응형

[코딩테스트 고득점 KIT - 힙]

 

 

힙큐(Heap Queue)와 우선순위 큐(Priority Queue)가 유사하다고 생각하여,

우선순위 큐를 사용하여 문제를 푸니 효율성 테스트에서 걸려 통과되지 않았다.

 

힙큐로 구현한 사람들이 많다하여,

왜 우선순위 큐로 하면 안되는건지 서칭을 하다...

https://slowsure.tistory.com/130 

 

아주 꼼꼼하게 써주신 글 덕분에

힙큐가 우선순위 큐보다 매우 빠르다는 것! - (PriorityQueue 는 Thread-Safe 하고 heapq는 Non-safe, 확인절차에서 시간)

 

문제는 힙큐에서 작은 순으로 빠져나오는 값을

리스트에 담아주며 K 값을 못넘는 경우 정해진 수식을 통하여 계산하고 다시 힙큐에 담는다.

 

이 과정을 반복하여

모든 값이 K 이상이 될 수 있는지 확인 후,

answer 값을 반환.

 

 

import heapq as hq

def solution(scoville, K):
    answer = 0

	# heapq의 장점, heapify를 통한 리스트-> heapq 변환
    # 우선순위 큐는 for문을 통해 초기값을 대입해줘야한다.
    hq.heapify(scoville)
    h = []
    count = 0

    while scoville:
		
        # 가장 작은 값이 K 이상이라면, 모든 값이 K 이상일 것
        # h 리스트에 값이 존재한다면, 0 번째 값이 최소가 아닐 수 있다.
        if scoville[0] >= K and not h:
            return count
        h.append(hq.heappop(scoville))
		
        # K 이하 값 두개를 연산하여 새로운 스코빌 지수 생성
        if len(h) == 2:
            count += 1
            total = h[0] + h[1] * 2

            h = []
            hq.heappush(scoville, total)


    return -1
반응형

'프로그래밍 공부 > 프로그래머스' 카테고리의 다른 글

[Python] K번째수  (0) 2023.01.01
[Python] 디스크 컨트롤러  (0) 2022.12.31
[Python] 주식가격  (0) 2022.12.30
[Python] 주차 요금 계산  (0) 2022.12.29
머쓱이 스탬프 획득!  (0) 2022.12.27
Comments