class Solution {
public int solution(int[] bandage, int health, int[][] attacks) {
int answer = health;
int time=attacks.length-1;
int continuity=0; //연속 성공
boolean attacked=false;
for(int i=1;i<=attacks[time][0];i++){
for(int j=0;j<attacks.length;j++){
if(i==attacks[j][0]){ //공격을 받으면
answer-=attacks[j][1];
continuity=0; //연속 성공 시간 0으로 초기화
if(answer<=0){ //체력이 0 이하이면
return -1;
}
attacked=true;
break;
}
}
if(!attacked){ //공격 받지 않았다면
answer+=bandage[1]; //1초당 회복
if(answer>health){ //최대 체력보다 높아지면
answer=health;
}
continuity++; //연속 성공 증가
}
if(continuity==bandage[0]){ //t초만큼 기술 연속 사용 성공하면
answer+=bandage[2]; //추가 체력 증가
if(answer>health){
answer=health;
}
continuity=0;//연속 성공 시간 0으로 초기화
}
attacked=false; //다음 초로 넘어갈 때 공격 받은 여부 변경해줘야함
}
return answer;
}
}
✏️풀이 방법
1. 공격을 당하면
-> 해당 피해량 만큼 체력 감소
( 만약 체력이 0 이하이면 -1을 리턴)
-> 연속 성공 횟수 0으로 초기화
2. 공격을 당하지 않으면
-> 1초당 회복량만큼 체력 증가
( 최대 체력보다 커지면 다시 최대 체력으로 초기화)
-> 연속 성공 횟수 증가
+ t초만큼 기술 연속 사용 성공하면 추가 체력 증가, 연속 성공 횟수 0으로 초기화
✍🏻 느낀점
막상 풀고 나면 어려운 문제가 아니었는데, 분기점을 제대로 생각을 안하고 풀어서 사소한 곳에서
오류가 생기는 느낌이다. 생각만 하고 풀어서 오류가 난 부분을 계속 고치면서 풀 생각을 하지 말고,
애초에 조건을 잘 정리해서 메모해놓고 푸는 연습을 해야겠다.
'코딩테스트 > Programmers' 카테고리의 다른 글
[JAVA] 숫자의 표현 (1) | 2024.04.20 |
---|---|
[JAVA] 이진 변환 반복하기 (1) | 2024.04.18 |
[JAVA] JadenCase 문자열 만들기 (1) | 2024.04.18 |
[JAVA] 최솟값 만들기 (0) | 2024.04.17 |
[JAVA] 올바른 괄호 (0) | 2024.04.17 |