// 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점 나온다... 테스트해보다가 알게 된 사실
반응형
'🔥 Javascript > 🔸 알고리즘' 카테고리의 다른 글
Javascript) 공원산책 (0) | 2024.10.11 |
---|---|
Javascript) 프로그래머스 - 가장 많이 받은 선물 (0) | 2024.09.22 |
Javscript ) 프로그래머스 - [PCCP 기출문제] 1번 / 동영상 재생기 (0) | 2024.09.21 |
JavaScript) 프로그래머스 가장 가까운 같은 글자 (0) | 2023.02.01 |
JavaScript) 프로그래머스 크기가 작은 부분문자열 (0) | 2023.01.29 |