본문 바로가기

코딩테스트/Programmers

[JAVA] 붕대 감기

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