붕대감기

이리·2025년 2월 7일
0

문제: https://school.programmers.co.kr/learn/courses/30/lessons/250137

문제설명

  • 주어진 파라미터: int[] bandage, int health, int[][] attacks
    • bandage: [시전 시간, 초당 회복량, 추가 회복량]
    • health: 캐릭터 체력
    • attakcs: [공격시간, 피해량]
  • 반환값: int
  • 붕대감기 = t초 동안 붕대를 감으면서 1초마다 x 체력 회복 → 모두 성공하면 +y 추가 회복
  • 공격 받거나 공격 당하는 순간에 회복 불가
  • 체력 0되면 회복 불가

풀이방식

  1. 0~attacks 마지막[0]까지 반복하면 된다.
  2. 공격을 받으면 리셋
  3. 연속 성공은 해당 힐 + 추가힐
  4. maxHealth보다 높아질 수 없음

코드

class Solution {
    public int solution(int[] bandage, int health, int[][] attacks) {
        int maxHealth = health;
        int len = attacks[attacks.length -1][0]; // 반복 초 
        int attackIdx = 0;                       // 공격 위치 
        int success = 0;                         // 연속 성공 시간 
        int needTime = bandage[0];               // 시전 시간 
        int heal = bandage[1];                   // 초당 회복량 
        int plusheal = bandage[2];               // 추가 회복량 
        
        
        for(int i = 0; i <= len; i++){
            int attackTime = attacks[attackIdx][0];  // 공격 시간 
            int attackPower = attacks[attackIdx][1]; // 피해량 
            
            if(i == attackTime){
                health -= attackPower;
                if(health <= 0) return -1;
                
                attackIdx++;
                success = 0;
                
                continue;
            }
            
            health += heal;
            success++;
            
            // 추가 회복량 
            if(success == needTime){
                health += plusheal;
                success = 0;
            } 
            
            // 최대 회복량 제한 
            if(health > maxHealth) health = maxHealth;            
        }
        
        return health;
    }
}
```![](https://velog.velcdn.com/images/illli_705/post/7ef27661-cd7a-430a-8c0a-08486b50ab57/image.png)

0개의 댓글

관련 채용 정보