끄적끄적 코딩
article thumbnail
728x90

문제 설명

게임 캐릭터는 붕대 감기라는 기술로 체력을 회복하며 몬스터의 공격을 견뎌야 합니다.

  • 붕대 감기는 초당 일정량을 회복하며, 연속 시전에 성공하면 추가 회복량을 얻습니다.
  • 몬스터의 공격 시 체력이 감소하고, 체력이 0 이하로 떨어지면 캐릭터는 죽습니다.

붕대 감기 정보, 최대 체력, 몬스터 공격 패턴이 주어질 때, 공격이 끝난 후 캐릭터의 체력을 반환하거나 죽었다면 -1을 반환합니다.


제한사항

  1. 붕대 감기:
    • 시전 시간: 1~50초.
    • 초당 회복량, 추가 회복량: 1~100.
  2. 최대 체력: 1~1,000.
  3. 공격 패턴:
    • 공격 시간은 오름차순, 중복 없음.
    • 공격 시간: 1~1,000.
    • 피해량: 1~100.


해결 방법

알고리즘: 시뮬레이션

  1. 공격 간 간격 처리:
    • 공격 시간 간 차이를 계산해 회복 가능한 체력을 구합니다.
    • 최대 체력을 초과하지 않도록 제한.
  2. 공격 처리:
    • 각 공격마다 피해량을 차감하며 체력 업데이트.
    • 체력이 0 이하이면 즉시 종료.
  3. 결과 반환:
    • 모든 공격 후 남은 체력을 반환하거나 죽었다면 -1을 반환.


시간 복잡도

  • 공격 처리: O(n)

구현 코드

function solution(bandage, health, attacks) {
  let answer = 0;
  let prevTime = 0;
  let maximumHealth = health;
  const [castTime, healPerSecond, bonusHealing] = bandage;

  for (const [time, damage] of attacks) {
    const timeGap = time - prevTime - 1;
    prevTime = time;

    health += Math.floor(timeGap / castTime) * bonusHealing + Math.floor(timeGap * healPerSecond);
    health = health > maximumHealth ? maximumHealth : health;
    health -= damage;

    if (health <= 0) {
      health = -1;
      break;
    }
  }

  answer = health;

  return answer;
}

검색 태그