https://school.programmers.co.kr/learn/courses/30/lessons/250137
시간의 흐름을 while로 처리했는데 생각보다 구현이 쉽지 않았다. 따라서 참고 풀이를 통해 시간흐름을 for문으로 하는게 처리가 편하다는 사실을 알게되었다.
🚨t(연속 성공) 를 직접 수정하지 말고 successTime 이라는 변수를 하나 더 만들어야한다는 것을 유의해야한다.
공격 시간을 Map에 저장해놔서 map.containsKey(i)로 공격 시간을 확인한다.
import java.util.*;
class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int n = attacks.length;
int attackIndex = 0;
int t = bandage[0];
int x = bandage[1];
int y = bandage[2];
int maxHealth = health;
int successTime = 0;
Map<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < n; i++){
map.put(attacks[i][0], attacks[i][1]);
}
for(int i = 1; i <= attacks[n-1][0]; i++){
if(map.containsKey(i)){ // 공격 수행
health -= map.get(i);
successTime = 0;
} else{
health += x;
successTime++;
if(successTime == t){
health += y;
successTime = 0;
}
if(health > maxHealth){
health = maxHealth;
}
}
if(health <= 0){
return -1;
}
}
return health;
}
}