728x90
문제 설명
게임 캐릭터는 붕대 감기라는 기술로 체력을 회복하며 몬스터의 공격을 견뎌야 합니다.
- 붕대 감기는 초당 일정량을 회복하며, 연속 시전에 성공하면 추가 회복량을 얻습니다.
- 몬스터의 공격 시 체력이 감소하고, 체력이 0 이하로 떨어지면 캐릭터는 죽습니다.
붕대 감기 정보, 최대 체력, 몬스터 공격 패턴이 주어질 때, 공격이 끝난 후 캐릭터의 체력을 반환하거나 죽었다면 -1을 반환합니다.
제한사항
- 붕대 감기:
- 시전 시간: 1~50초.
- 초당 회복량, 추가 회복량: 1~100.
- 최대 체력: 1~1,000.
- 공격 패턴:
- 공격 시간은 오름차순, 중복 없음.
- 공격 시간: 1~1,000.
- 피해량: 1~100.
해결 방법
알고리즘: 시뮬레이션
- 공격 간 간격 처리:
- 공격 시간 간 차이를 계산해 회복 가능한 체력을 구합니다.
- 최대 체력을 초과하지 않도록 제한.
- 공격 처리:
- 각 공격마다 피해량을 차감하며 체력 업데이트.
- 체력이 0 이하이면 즉시 종료.
- 결과 반환:
- 모든 공격 후 남은 체력을 반환하거나 죽었다면 -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;
}
'알고리즘' 카테고리의 다른 글
[Javascript] 프로그래머스 - 달리기 경주 (0) | 2025.01.02 |
---|---|
[Javascript] 프로그래머스 - 동영상 재생기 (0) | 2025.01.02 |
[Java] 프로그래머스 - 입국심사 (0) | 2023.08.28 |
[Java] 프로그래머스 - 택배 배달과 수거하기 (0) | 2023.08.28 |
[Java] 백준 2617번 구슬 찾기 (1) | 2023.08.27 |