[프로그래머스] PCCP 기출문제 1번

UBIN·2023년 12월 3일
0
post-custom-banner

문제

캐릭터의 회복 능력과 몬스터에게 피격 당하는 시간, 데미지가 주어졌을 때 몬스터의 모든 공격이 끝난 직후 캐릭터의 체력을 구해라.

ex)

bandage = [5, 1, 5]	# 지속시간: 5초, 초당회복력: 1, 보너스회복량: 5
health = 30			# 캐릭터최대체력: 30
attacks = [[2, 10], [9, 15], [10, 5], [11, 5]]	# 2초에 10데미지, 9초에 15데미지..

처음에는 매초마다 검사를 하려했지만 비효율적인거 같아 몬스터가 공격할 때마다 검사하는 방식으로 바꿨다.

  1. 공격받기전까지 시간누적해서 한번에 회복 후 타이머조정

전체코드

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초가 흘렀다면 두 번의 보너스 회복이 있어야 하지만 주석된 코드는 상관없이 무조건 한 번만 회복한다.
찾는데 오래걸렸다...

profile
ubin
post-custom-banner

0개의 댓글