Search

PGS 붕대 감기

태그
구현

문제 설명

붕대 감기 기술과 몬스터의 공격 패턴이 주어질 때, 캐릭터가 체력을 회복하며 몬스터의 공격을 견디고 끝까지 생존할 수 있는지 판별하는 문제

예제 입력/출력

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

제약 조건

1attacks1001 ≤ |attacks| ≤ 100
11 ≤ 공격 시간 1,000≤ 1,000
attacks는 공격 시간을 기준으로 오름차순 정렬된 상태
attacks의 공격 시간은 모두 다름.

문제 풀이

브루트 포스 - O(1,000)O(1,000)

풀이 코드

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
복사