Minimum Operations to Exceed Threshold Value II
MediumArrayHeap (Priority Queue)Simulation
문제 설명
정수 배열 nums
와 정수 k
가 주어집니다.
그리고, 다음과 같은 연산을 수행하니다.
nums
에서 가장 작은 두 정수x
와y
를 선택합니다.x
와y
를nums
에서 제거합니다.(min(x, y) * 2 + max(x, y))
를nums
의 임의의 위치에 삽입합니다.
위 연산은 nums
에 최소 두 개의 요소가 있을 때만 실행할 수 있습니다.
모든 배열 요소가 k
이상이 되도록 하는 최소 연산 횟수를 반환합니다.
문제 풀이
- 주어진 배열
nums
의 모든 요소를 힙에 추가합니다. - 힙의 길이가
2
보다 작거나, 힙의 최솟값이k
를 초과할 때까지 다음 과정을 반복합니다:- 힙에서 가장 작은 두 요소를 꺼냅니다.
(min(x, y) * 2 + max(x, y))
를 계산하여 힙에 추가합니다.- 연산 횟수를 증가시킵니다.
- 현재까지의 연산 횟수를 반환합니다.
import { Heap } from '@algorithm/lib';
export function minOperations(nums: number[], k: number): number {
const heap = new Heap<number>((a, b) => a - b);
nums.forEach((num) => {
heap.push(num);
});
let operation = 0;
while (1 < heap.length && heap.peek !== undefined && heap.peek < k) {
const x = heap.pop() ?? 0;
const y = heap.pop() ?? 0;
heap.push(2 * x + y);
operation += 1;
}
return operation;
}
복잡도
- 시간 복잡도:
- 공간 복잡도: