코테
[JS] 붕대감기 (해설포함)
zenna
2024. 3. 1. 01:02
728x90
테스트케이스 최대 소요시간 : 0.20ms
문제 요약
//1초에 x만큼 회복하고, t를 채우면 y가 추가됨
bandage = [시전시간 t, 초당회복력x, 추가회복량 y]
health = 최대체력
attacks = [ [공격시간,피해량], [공격시간, 피해량] ...]
제출답안
function solution(bandage, health, attacks) {
let nowhealth = health - attacks[0][1];
if (nowhealth <= 0 ){
return -1;
}else{
for(let i = 1 ; i < attacks.length ; i++){
let minusTime = attacks[i][0]-attacks[i-1][0] -1;
nowhealth += minusTime * bandage[1] + parseInt(minusTime/bandage[0])*bandage[2];
nowhealth = (nowhealth > health) ? health : nowhealth;
nowhealth -= attacks[i][1];
if (nowhealth <= 0 ){
return -1 ;
}
}
}
return nowhealth;
}
답안설명
function solution(bandage, health, attacks) {
// nowhealth = 현재체력. 첫번째 공격까지는 최대체력 health와 동일
let nowhealth = health - attacks[0][1]; // 1번째 공격
if (nowhealth <= 0 ){ // 1공격만에 사망한경우
return -1; // -1 리턴
}else{
// 2번째 공격부터는 FOR문으로 진행됨
for(let i = 1 ; i < attacks.length ; i++){ //1번째 공격은 이미 진행되었으므로 i = 1로 시작
// minusTime = 현재 공격과 이전 공격의 시간차이(초)
let minusTime = attacks[i][0]-attacks[i-1][0] -1;
// 이번 공격을 받기 직전의 회복된 상태를 만들려는 것이므로 -1
nowhealth += minusTime * bandage[1] + parseInt(minusTime/bandage[0])*bandage[2];
// 시간차이 * 초당 회복량 + 연속성공횟수 * 추가 회복량
nowhealth = (nowhealth > health) ? health : nowhealth;
// 회복된 체력이 최대체력을 넘는 경우 최대체력으로 맞춰줌
nowhealth -= attacks[i][1]; // (i+1)번째 공격받음
if (nowhealth <= 0 ){ // 사망했다면
return -1 ; // -1리턴
} //사망하지 않았다면 다음 회차의 공격 계산
}
}
return nowhealth; // 남은체력 리턴
}
728x90