(프로그래머) Lv 2. 디펜스 게임

https://school.programmers.co.kr/learn/courses/30/lessons/142085

프로그래머

코드 중심 개발자를 모집합니다. 스택 기반 위치 일치. 프로그래머의 개발자별 프로필에 등록하고 귀하와 기술 호환성이 좋은 회사와 연결하십시오.

Programmers.co.kr

function solution(n, k, enemy) {
    var answer = 0;
    const (arr, invincibility) = (enemy.reduce((acc, e) => ((acc(e) = ++acc(e) || 1), acc), ()), {});

    for (let i = arr.length - 1, tempK = k; i >= 0 && tempK; --i) {
        if (!arr(i)) continue;

        if (tempK <= arr(i)) {
            invincibility(i) = tempK;
            tempK = 0;
        } else {
            invincibility(i) = arr(i);
            tempK -= arr(i);
        }
    }

    for (e of enemy) {
        if (invincibility(e) && k) {
            --k, --invincibility(e), ++answer;
            continue;
        }

        if (n < e && k) --k, ++answer;
        else if (n >= e) (n -= e), ++answer;
        else break;
    }

    return answer;
}

GitHub :