728x90
테스트케이스 최대 소요시간 : 0.06ms
문제 요약
//1초에 x만큼 회복하고, t를 채우면 y가 추가됨
bandage = [시전시간 t, 초당회복력x, 추가회복량 y]
health = 최대체력
attacks = [ [공격시간,피해량], [공격시간, 피해량] ...]
제출답안
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int nowHealth = health - attacks[0][1];
if (nowHealth <= 0 ){
return -1;
}
for ( int i =1 ; i < attacks.length ; i++ ){
int betweenTime = attacks[i][0] - attacks[i-1][0] - 1;
nowHealth += bandage[1] * betweenTime + ((int)(betweenTime/bandage[0])) * bandage[2];
if(nowHealth> health ) nowHealth = health;
nowHealth -= attacks[i][1] ;
if (nowHealth <= 0){
return -1;
}
}
return nowHealth;
}
}
문제해설
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
// nowHealth = 현재체력. 첫번째 공격까지는 최대체력 health와 동일
int nowHealth = health - attacks[0][1]; // 1번째 공격
if (nowHealth <= 0 ){ // 1공격만에 사망한경우
return -1;
}
// 2번째 공격부터는 FOR문으로 진행됨
for ( int i =1 ; i < attacks.length ; i++ ){ //1번째 공격은 이미 진행되었으므로 i = 1로 시작
int betweenTime = attacks[i][0] - attacks[i-1][0] - 1;
// betweenTime = 현재 공격과 이전 공격의 시간차이(초)
// 이번 공격을 받기 직전의 회복된 상태를 만들려는 것이므로 -1
nowHealth += bandage[1] * betweenTime + ((int)(betweenTime/bandage[0])) * bandage[2];
// 시간차이 * 초당 회복량 + 연속성공횟수 * 추가 회복량
if(nowHealth> health ) nowHealth = health;
// 회복된 체력이 최대체력을 넘는 경우 최대체력으로 맞춰줌
nowHealth -= attacks[i][1] ; // (i+1)번째 공격받음
if (nowHealth <= 0){ // 사망했다면
return -1; // -1리턴
} //사망하지 않았다면 다음 회차의 공격 계산
}
return nowHealth; // 남은체력 리턴
}
}
#99클럽 #99일지 #코딩테스트 #개발자스터디 #항해 #TIL
728x90
'코테' 카테고리의 다른 글
[Java] 정수 제곱근 판별 (0) | 2024.04.11 |
---|---|
[JS] 성격 유형 검사 (해설포함) (0) | 2024.04.10 |
[Java] 없는 숫자 더하기 (0) | 2024.04.08 |
[JS] 나누어 떨어지는 숫자 배열 (0) | 2024.04.07 |
[Java] 짝수와 홀수 (0) | 2024.04.06 |
댓글