본문 바로가기

프로그래머스(Java)/Level 1

[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기

728x90

코드 힌트

  1. 턴제 게임:
    • 게임은 턴제로 진행되며, 몬스터가 공격하는 턴에는 회복을 할 수 없습니다.
    • 반면, 공격이 없는 준비 턴에는 체력을 회복할 수 있습니다.
  2. 기본 체력 회복:
    • 매 턴마다 기본 회복량이 적용됩니다.
    • 공격이 발생하기 전까지 회복은 계속되며, 이로 인해 체력이 점진적으로 증가합니다.
  3. 추가 회복:
    • 일정 시간마다 추가적인 회복이 발생합니다.
    • 이 회복은 주기적으로 일어나며, 기본 회복과 함께 체력을 추가로 회복시킬 수 있습니다.
  4. 공격 처리:
    • 몬스터의 공격이 발생하면 현재 체력에서 공격 데미지만큼 감소합니다.
    • 공격 후 회복 주기가 초기화되므로, 다음 공격까지 체력을 최대한 회복하는 것이 중요합니다.
  5. 게임 종료 조건:
    • 체력이 0 이하로 떨어지면 즉시 게임이 종료됩니다.
    • 모든 공격을 견뎌낸 후 남은 체력이 게임의 최종 결과로 반환됩니다.

 


정답은 더보기 클릭

더보기
class Solution {
    
    // 경과된 회복 시간을 추적하는 변수
    static int healingCounter = 0;
    // 최대 체력을 저장하는 변수
    static int maxHp;
    
    public int solution(int[] bandage, int health, int[][] attacks) {
        int currentTime = 0;
        int t = bandage[0];  // 기본 회복 시간이 지나면 회복이 강화되는 시간 간격
        int x = bandage[1];  // 매 턴마다 회복되는 기본 체력량
        int y = bandage[2];  // 기본 회복 시간(t)이 경과된 후 추가로 회복되는 체력량
        
        maxHp = health;  // 최대 체력을 초기 체력으로 설정
        
        for (int[] attack : attacks) {
            currentTime++;
            int nextTime = attack[0];  // 다음 공격이 발생하는 시간
            int damage = attack[1];    // 이번 공격으로 입는 피해량
            
            // 현재 시간부터 다음 공격 시간까지 회복 처리
            while (currentTime < nextTime) {
                currentTime++;
                health = applyHealing(t, x, y, health);
            }
            // 공격에 의한 체력 감소
            health -= damage;
            healingCounter = 0;  // 공격을 받으면 회복 시간 초기화
            if (health <= 0) return -1;  // 체력이 0 이하가 되면 패배
        }
        
        return health;  // 모든 공격을 견뎌낸 후의 남은 체력 반환
    }
    
    // 주어진 조건에 따라 플레이어의 체력을 회복하는 메소드
    public static int applyHealing(int t, int x, int y, int health) {
        int result = health;
        healingCounter++;  // 경과된 회복 시간 증가
        
        // 기본 회복 처리
        if (health + x <= maxHp) result += x;
        else result = maxHp;
        
        // 추가 회복 처리
        if (healingCounter == t) {
            healingCounter = 0;
            if (result + y <= maxHp) result += y;
            else result = maxHp;
        } 
        
        return result;  // 회복된 체력 반환
    }
}
728x90