[PCCP 기출문제] 1번 / 붕대 감기

2024. 12. 2. 18:14에러&&공부노트

풀이

function solution(bandage, health, attacks) {
    const [castTime, healPerSec, bonusHeal] = bandage;
    const maxHealth = health;
    let currentHealth = health;
    let consecutiveHealing = 0;
    let lastAttackTime = 0;
    
    // attacks를 Object로 변환하여 빠른 검색이 가능하게 함
    const attackMap = {};
    attacks.forEach(([time, damage]) => {
        attackMap[time] = damage;
        lastAttackTime = Math.max(lastAttackTime, time);
    });
    
     // 0초부터 마지막 공격 시간까지 진행
    for (let time = 0; time <= lastAttackTime; time++) {
        // 공격이 있는 경우
        if (attackMap[time] !== undefined) {
            currentHealth -= attackMap[time];
            consecutiveHealing = 0;
            
            // 체력이 0 이하가 되면 캐릭터 사망
            if (currentHealth <= 0) {
                return currentHealth = -1;
            }
        } 
        // 공격이 없는 경우 회복
        else {
            // 기본 회복
            currentHealth += healPerSec;
            consecutiveHealing++;
            
            // 연속 성공 보너스 체력 회복
            if (consecutiveHealing === castTime) {
                currentHealth += bonusHeal;
                consecutiveHealing = 0;
            }
            
            // 최대 체력을 초과할 수 없음
            if (currentHealth > maxHealth) {
                currentHealth = maxHealth;
            }
        }
    }
    
    return currentHealth;
}