상세 컨텐츠

본문 제목

[프로그래머스] 붕대감기

💯ProblemSolving/문제 풀이-Java

by :부셔져버린개발자 2025. 1. 31. 10:22

본문

       문제 요약        

- 문제

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

         아이디어        

 

 

구현 

         소스코드        

 

class Solution {
    static int CONTINUE_TIME, OVERCOME_AMOUNT, ADD_OVERCOME_AMOUNT;
    static int MAX_HEALTH;
    
    public int solution(int[] bandage, int health, int[][] attacks) {
        CONTINUE_TIME = bandage[0]; // 지속 시간
        OVERCOME_AMOUNT = bandage[1]; // 초당 회복량
        ADD_OVERCOME_AMOUNT = bandage[2]; // 추가 회복량
        MAX_HEALTH = health; // 최대 체력
        
        int notAttack = 0; // 마지막 공격 받은 시점 저장
        
        for (int i = 0; i < attacks.length; i++) {
            int attackTime = attacks[i][0]; // 공격 시간
            int damage = attacks[i][1]; // 피해량
            
            if (attackTime > notAttack) { // 공격 사이에 회복할 시간이 있는 경우
                int continuousTime = attackTime - notAttack - 1; // 연속 회복 가능 시간
                
                // 기본 회복량 적용
                int recoveredHealth = health + (OVERCOME_AMOUNT * continuousTime);
                
                // 추가 회복량 적용 (연속 회복 시간이 조건을 만족할 경우)
                if (continuousTime >= CONTINUE_TIME) {
                    recoveredHealth += (continuousTime / CONTINUE_TIME) * ADD_OVERCOME_AMOUNT;
                }
                
                // 최대 체력 초과 방지
                health = Math.min(MAX_HEALTH, recoveredHealth);
            }
            
            // 공격을 받음
            health -= damage;
            
            if (health <= 0) {
                return -1;
            }
            
            notAttack = attackTime;
        }
        
        return health;
    }
}

 

728x90

관련글 더보기