본문 바로가기
프로그래머스/Lv.1

PCCP 기출문제 > 붕대 감기 - Pyton, 구현

by 아찌방 2024. 12. 8.

 

 

https://school.programmers.co.kr/learn/courses/30/lessons/250137

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

코드 & 풀이

 

def solution(bandage, health, attacks):
    max_health = health
    bonus_standard, heal_per_sec, bonus_heal = bandage

    for i in range(len(attacks)):
        if i == 0:
            health -= attacks[i][1]
        else:
            gap = attacks[i][0] - attacks[i-1][0] - 1
            bonus = (gap // bonus_standard) * bonus_heal if gap >= bonus_standard else 0
            health = min(health + gap * heal_per_sec + bonus, max_health)
            health -= attacks[i][1]
        
        if health <= 0:
            return -1
    
    return health

 

매 초마다 공격이 있는지 없는지 확인하는건 너무 비효율적이기 때문에

 

공격을 기준으로 회복량과 데미지를 같이 계산했습니다.

 

순서는 회복 -> 데미지 계산 -> 죽음 여부 확인

 

1. 회복

 

붕대를 감는 시간 = 현재 공격 받은 시간 - 이전에 공격 받은 시간 - 1 이죠?

 

그리고 붕대를 일정 시간 이상 감으면 보너스 회복량이 주어집니다.

 

이는 붕대를 감는 시간을 일정 시간으로 나눈 값이 됩니다.

 

그렇게 구한 회복량을 현재 체력에 더해주는데,

 

이때 최대 체력을 넘어가서는 안됩니다.

 

2. 데미지 계산

 

현재 체력에서 데미지를 빼주면 됩니다.

 

3. 죽음 여부 확인

 

현재 체력이 0 이하인지 체크

 

조금이라도 빠르게 처리하기 위해 바로 return -1 해버리기

 

 

 

 

 

 

다음에 또 봐요

 

728x90