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;
}
}
[프로그래머스] 광물 캐기 (0) | 2025.01.31 |
---|---|
[프로그래머스] 피로도 (0) | 2025.01.31 |
[코드트리] 바이러스 백신 - unsolved (0) | 2025.01.30 |
[프로그래머스] 이모티콘 할인 행사 (0) | 2025.01.30 |
[프로그래머스] 카카오 인턴 - 수식 최대화 (0) | 2025.01.30 |