def solution(scoville, K):
heapq.heapify(scoville)
cnt = 0
while True:
if len(scoville) == 1 and scoville[0] < K:
a = heapq.heappop(scoville)
if a < K:
b = heapq.heappop(scoville)
new = a + (b * 2)
heapq.heappush(scoville, new)
cnt += 1
else:
return cnt
function solution(scoville, K) {
let answer = 0;
// 오름차순으로 정렬
scoville.sort((a, b) => b - a);
while (scoville[scoville.length - 1] < K) {
// 가장 맵지 않은 음식의 스코빌 지수
const leastSpicy = scoville.pop();
// 두 번째로 맵지 않은 음식의 스코빌 지수
const secondLeastSpicy = scoville.pop();
// 섞은 음식의 스코빌 지수 계산 및 배열에 추가
const mixedSpicy = leastSpicy + (secondLeastSpicy * 2);
scoville.push(mixedSpicy);
// 섞은 후 다시 정렬
scoville.sort((a, b) => b - a);
answer++;
// 모든 음식의 스코빌 지수가 K 이상이 되면 반복 종료
if (scoville[scoville.length - 1] >= K) {
break;
}
// 음식이 하나만 남았는데 K 이상이 되지 않는 경우
if (scoville.length === 1 && scoville[0] < K) {
return -1;
}
}
return answer;
}
이전에 풀었던 문제이지만 Heap
에 대한 지식이 부족한 것 같으므로 정리를 먼저 합니다.
위에 코드도 풀리지 않았던 문제로 이전에 시도했다가 포기한 문제입니다.
<aside> 💡 완전 이진 트리의 일종으로 우선순위 큐를 위하여 만들어진 자료구조로 최댓값, 최솟값을 쉽게 추출할 수 있는 자료구조입니다. - 출처
</aside>
힙(heap) 자료구조 개념 이해하기 | 개발자 코딩테스트 & 면접 지식
이번 문제의 경우 JS로 문제를 풀려면 직접 힙을 구현을 했어야 합니다. 때문에 JS로 풀기에는 적절하지 않았던 것 같습니다.