문제 설명
•
붕대 감기 기술과 몬스터의 공격 패턴이 주어질 때, 캐릭터가 체력을 회복하며 몬스터의 공격을 견디고 끝까지 생존할 수 있는지 판별하는 문제
예제 입력/출력
bandage | health | attacks | result |
[5, 1, 5] | 30 | [[2, 10], [9, 15], [10, 5], [11, 5]] | 5 |
[3, 2, 7] | 20 | [[1, 15], [5, 16], [8, 6]] | -1 |
[4, 2, 7] | 20 | [[1, 15], [5, 16], [8, 6]] | -1 |
[1, 1, 1] | 5 | [[1, 2], [3, 2]] | 3 |
제약 조건
•
◦
공격 시간
◦
attacks는 공격 시간을 기준으로 오름차순 정렬된 상태
◦
attacks의 공격 시간은 모두 다름.
문제 풀이
브루트 포스 -
풀이 코드
def solution(bandage, max_health, attacks):
attacks.reverse() # 효율적인 pop을 위해 리스트 reverse
t = 0 # 시간
cnt = 0 # 연속 성공
health = max_health # 현재 체력
while attacks:
t += 1
if t == attacks[-1][0]: # 몬스터 공격 여부 확인
attack_time, attack_num = attacks.pop()
health -= attack_num
cnt = 0
if health <= 0:
return -1
else:
cnt += 1
if cnt == bandage[0]: # 연속 회복 성공 시
health = min(max_health, health + bandage[1] + bandage[2])
cnt = 0
else:
health = min(max_health, health + bandage[1])
return health
Python
복사