

from collections import deque
def func_scoville(scoville):
arr = deque(sorted(scoville))
first = arr.popleft() # 최소값을 pop
sec = arr.popleft() # 두 번째 최소값을 pop
new_scoville = first + (sec * 2)
arr.appendleft(new_scoville) # 새로운 스코빌 지수를 arr에 추가
arr = sorted(arr)
return list(arr)
def solution(scoville, K):
answer = 0
scoville = sorted(scoville)
while scoville[0] < K:
# 모든 음식의 스코빌 지수를 K 이상으로 만들 . 수없는경우
if len(scoville) < 2:
return -1
scoville = func_scoville(scoville)
answer += 1
return answer
채점 결과
정확성: 83.9
효율성: 0.0
합계: 83.9 / 100.0
이러한 feedBack 을 얻었다
파이썬의
sorted함수를 사용하면 리스트 또는deque의 모든 원소를 정렬하게 되는데, 이 과정은 시간 복잡도 측면에서 비효율적입니다. 더 근본적인 문제는, 매 섞는 작업마다 전체를 다시 정렬하는 것은 필요한 작업이 아닐 수 있으며, 이러한 접근 방식은 문제를 푸는데 요구되는 '힙(Heap)' 자료구조의 특성을 활용하지 않는다는 점입니다.
문제 해결을 위한 힌트로, 파이썬에서는 최소 힙 구조를 구현하기 위해heapq모듈을 제공합니다. 따라서,func_scoville함수 대신heapq모듈을 사용하여 문제 접근 방식을 재고해보세요.
그래서 최소힙을 제대로 활용하지 않고 있다는 것을 알게되었고 deapq 를 활용하기 위한 예시를 찾아보게되었다.
from collections import deque
import heapq
def mix_scoville(heap):
first = heapq.heappop(heap)
sec = heapq.heappop(heap)
new_scoville = first + (sec * 2)
heapq.heappush(heap, new_scoville)
def solution(scoville, K):
answer = 0
heap = []
for value in scoville:
heapq.heappush(heap, value)
while heap[0] < K:
if len(heap) < 2:
return -1
mix_scoville(heap)
answer += 1
return answer