문제 링크

풀이 과정

전체 코드

def solution(bandage, health, attacks):
    '''
    bandage: [시전 시간, 초당 회복량, 추가 회복량]
    health: 최대 체력
    attcks: [공격 시간, 피해량]
    '''
    answer = health     # 현재 체력
    max_time = attacks[-1][0]   # 마지막 공격 시간
    cur_time = 1
    success = 0  # 다음 공격까지 회복 시간
    attack_dict = {attack_info[0]: attack_info[1] for attack_info in attacks}  # 공격 사전
    
    while cur_time <= max_time:
        if cur_time not in attack_dict:   # 해당 시간에 공격을 받지 않으면 -> 회복
            success += 1
            if success >= bandage[0]:
                answer = min(answer+bandage[1]+bandage[2], health)
                success = 0
            else:
                answer = min(answer+bandage[1], health)
        else:   # 공격 받을 때
            success = 0
            answer -= attack_dict[cur_time]
            if answer <= 0:   # 현재 체력이 0 이하인가?
                return -1 
        cur_time += 1
    
    return answer