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
'코테' 카테고리의 다른 글
[JS] 가장 많이 받은 선물_충격적인 얕은 복사 (0) | 2024.03.12 |
---|---|
[JS] 가장 가까운 같은 글자 (0) | 2024.03.10 |
[JS] 삼총사 (프로그래머스) (0) | 2024.03.08 |
[JS] 푸드 파이트 대회 (0) | 2024.03.07 |
[js] 달리기 경주_그런데 이제 자괴감을 곁들인 (0) | 2024.03.07 |
댓글