■ 해결 방법
health 감소에 영향을 주는 상황은 attacks이 있을 때 발생한다. 그러므로 health가 감소하는 상황을 이용해 health를 구한다. 최대 체력이 정해져 있기 때문에, 체력 감소 + 붕대로 체력 회복 패턴을 반복한다. 연속 성공 했을 때, 추가 회복량을 주는 것만 중간에 조건을 끼워서 계산하면 비교적 쉽게 해결할 수 있다.
■ 코드
function solution(bandage, health, attacks) {
var answer = 0;
let max_health = health;
health = health - attacks[0][1];
for(let i = 1; i < attacks.length; i++){
let duration = attacks[i][0] - attacks[i-1][0] - 1;
let extraPoint = 0;
if(duration >= bandage[1]) extraPoint = Math.floor(duration / bandage[0])* bandage[2];
health += ((duration * bandage[1]) + extraPoint)
if(health > max_health) health = max_health;
health -= attacks[i][1];
if(health < 1) {answer = -1; break;}
else answer = health;
}
return answer;
}
728x90
'개발 > 알고리즘' 카테고리의 다른 글
프로그래머스_달리기 경주 (0) | 2024.05.03 |
---|---|
프로그래머스_개인정보 수집 유효기간 (0) | 2024.05.02 |
프로그래머스_겹치는 선분의 길이 (0) | 2024.04.22 |
프로그래머스_평행 (0) | 2024.04.19 |
프로그래머스_구명보틀 (0) | 2021.08.26 |