https://school.programmers.co.kr/learn/courses/30/lessons/142085
from heapq import heappush, heappop
def solution(n, k, enemy):
h = []
answer, e_sum = 0, 0
for e in enemy:
heappush(h, -e)
e_sum += e
if e_sum > n:
if k == 0: break
e_sum += heappop(h)
k -= 1
answer += 1
return answer
function solution(n, k, enemy) {
// n은 병사, k는 무적권, enemy는 리스트
let left = 0;
let right = enemy.length;
while (left <= right) {
const mid = Math.trunc((left + right) / 2);
const dieEnemy = enemy.slice(0, mid).sort((a,b) => b - a);
let chance = k;
const sumEnemy = dieEnemy.reduce((a, c) => {
// 무적권이 있다면
if(chance > 0) {
chance -= 1;
return a;
}
return a + c;
}, 0)
// 병사 또는 무적권이 남으면 left 증가
if(n - sumEnemy >= 0 && chance >= 0) {
left = mid + 1
} else {
right = mid - 1
}
}
return left - 1;
}