캐릭터의 회복 능력과 몬스터에게 피격 당하는 시간, 데미지가 주어졌을 때 몬스터의 모든 공격이 끝난 직후 캐릭터의 체력을 구해라.
ex)
bandage = [5, 1, 5] # 지속시간: 5초, 초당회복력: 1, 보너스회복량: 5
health = 30 # 캐릭터최대체력: 30
attacks = [[2, 10], [9, 15], [10, 5], [11, 5]] # 2초에 10데미지, 9초에 15데미지..
처음에는 매초마다 검사를 하려했지만 비효율적인거 같아 몬스터가 공격할 때마다 검사하는 방식으로 바꿨다.
def solution(bandage, health, attacks):
bonusTime = bandage[0]
recoveryHp = bandage[1]
bonusHp = bandage[2]
curHp = health
timer = 1
for attackedTime, damage in attacks:
curHp += (attackedTime - timer) * recoveryHp # 회복가능시간 전부 합산
curHp += (attackedTime - timer) // bonusTime * bonusHp # 보너스 추가 회복
# curHp += bonusHp if (attackedTime - timer) >= bonusTime else 0 # 잘몬된 코드
curHp = health if curHp > health else curHp # 최대체력 보정
curHp -= damage # 피격
if curHp <= 0: # 사망시 즉시 리턴
return -1
timer = attackedTime + 1 # 회복가능시간 합산을 위한 타이머 갱신
return curHp
테스트케이스 14번이 자꾸 틀려 이유를 찾지 못했지만 주석처리된 코드가 잘못된 것이었다.
5초가 보너스회복 시간이라 할 때 공격받기까지 10초가 흘렀다면 두 번의 보너스 회복이 있어야 하지만 주석된 코드는 상관없이 무조건 한 번만 회복한다.
찾는데 오래걸렸다...