t초동안 붕대를 감음. 1초마다 x만큼 체력 회복
t초 연속 성공하면 추가로 y체력 회복 (최대 체력 존재)
공격당하는 순간에는 회복할 수 없음.
공격당하면 연속 성공 시간이 0초로 초기화됨.
끝나는 즉시 붕대감기 다시 시작.
정해진 피해량만큼 체력이 줄어든다.
현재 체력 <= 0 이면 죽음.
bandage
: [시전시간, 초당 회복량, 추가 회복량]health
: 최대 체력attacks
: 몬스터의 [공격 시간, 피해량]💡1번. 몬스터의 마지막 공격 시간까지 for문 돌면서 초마다 상황을 업데이트
💡2번. attacks
배열을 순회하며, 공격 사이의 시간을 계산식으로 처리
예를들어 attacks
배열의 값이 [[2, 10], [9, 15], [10, 5], [11, 5]]
라고 하자.
beforeTime
= 이전 공격과 현재 공격 사이의 시간 계산'''
# bandage : [시전 시간, 초당 회복량, 추가 회복량]
# health : 최대 체력
# attacks : 몬스터의 [공격 시간, 피해량]
'''
def solution(bandage, health, attacks):
castingTime = bandage[0]
recoveryPerSec = bandage[1]
bonusRecovery = bandage[2]
success = 0 # 연속 성공 시간
time = 0 # 이전 공격을 만난 시간
maxHealth = health
# 1. attack : [공격시간, 피해량]
for attack in attacks:
attackTime = attack[0] # 공격시간
attackAmount = attack[1] # 피해량
# 1. 공격 전까지의 상황 update
beforeTime = max(0, attackTime - time - 1)
success += beforeTime #연속성공누적수
health += recoveryPerSec * beforeTime
health = min(maxHealth, health)
# 추가체력 처리
sCount = success // castingTime # 추가체력 얻을 수 있는 횟수
if(sCount >= 1):
health += bonusRecovery * sCount
health = min(maxHealth, health)
success = success % castingTime
# 2. 공격 처리
success = 0
health -= attackAmount
if health<=0: return -1
time = attackTime
return health
5
이어야 하는데 7
이 나왔다. 로직 자체가 잘못됐다기보단 요구사항을 까먹고 구현하지 못한거라 코드를 계속 살펴봐도 문제점을 찾을 수 없었다... 결국 입출력 예시와 비교하며 디버깅해보고 나서야 최대체력을 넘겼다는걸 알아차렸다. 요구사항을 꼼꼼히 읽고 기억해두자!!!