Javascript ) 프로그래머스 - [PCCP 기출문제] 1번 / 붕대 감기
// 1. 붕대감기 시전시간만큼 1초당 회복, 시전시간 다 채우면 추가 회복, 최대 체력 이하로 회복
// 2. 기술 도중 공격당하면 기술 취소당하고 공격당한 순간 체력회복 불가
// 3. 체력이 0 이하로 떨어지면 죽음
// 4. 캐릭터 마지막 체력 리턴, 죽었을 때는 -1 리턴

function solution(
    bandage, // [기술의 시전 시간, 1초당 회복량, 추가 회복량]
    health, // 최대체력
    attacks // [[몬스터 공격시간, 피해량]]
) {
    // 어택을 돌려서 추론
    
    const [skillTime, heal, extraHeal] = bandage;
    
    let remainHealth = health;
    let prevAttackTime = 0;
    
    for (const [idx, attack] of attacks.entries()) {
        const [time, damage] = attack;
        
        if (idx !== 0) {
            // 어택 사이의 회복 시간 계산
            // 9초에 15의 공격 > 6초동안 회복(9초-2초-1) > 시전시간 5초 1번 달성 > 추가체력 5획득
            const bandageTime = time - prevAttackTime - 1;
            const addExtraHeal = parseInt(bandageTime / skillTime);
            
            // 회복된 체력 = ([공격까지 걸린시간 / 시전시간]의 몫 * 추가체력) + (총 시전된 시간)
            remainHealth += (addExtraHeal * extraHeal) + (bandageTime * heal);
            // 회복된 체력 최대체력 이상으로 회복되지 못함
            if (remainHealth > health) remainHealth = health;
        }
        
        // 공격 피해량 계산, 캐릭터가 죽었을 때 멈춤
        remainHealth -= damage;
        if (remainHealth < 0) break;
        
        // 이전 공격 시간
        prevAttackTime = time;
    }
    
    return remainHealth > 0 ? remainHealth : -1;
}javascript

 

 

+ for 문 돌릴 때 캐릭터 죽었을 경우 break 안주면 80점 나온다... 테스트해보다가 알게 된 사실

반응형