https://school.programmers.co.kr/learn/courses/30/lessons/250137
구현 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
1. 최대 체력 health_limit을 선언 후 health 값으로 갱신해줍니다.
2. 붕대 감는(치료)시간 cure_time, 초당 회복량 cure_amount_per_sec, 치료시간만큼 치료 성공시 얻는 추가 회복량 bonus_cure를 선언 후 bandage에서 값을 가져와 저장합니다.
📔 풀이과정
공격 정보 attacks에 대해 for loop를 수행하며 다음을 진행합니다.
1. 현재 공격정보로부터 지역변수 공격 시간 attack_time, 피해량 attack_damage를 선언 후 저장합니다.
2. attack_damage만큼 피해를 받으므로 health에서 빼줍니다.
3. health가 음수라면 생존에 실패했으므로 -1을 반환합니다.
4. 마지막 공격은 데미지만 받으면 되므로 마지막 인덱스의 경우 break해줍니다.
5. 바로 붕대감기를 진행합니다. 5-1. 붕대를 감을 수 있는 시간은 다음 공격시간 - 현재 공격시간 - 1입니다. 연속성공시간이 0초부터 시작하기 때문에 1을 빼야됨에 주의해줍니다. 5-2. health에 붕대를 감은 시간 * 초당 회복량만큼 값을 더해줍니다. 5-3. health에 붕대를 감은 시간 // cure_time * bonus_cure 만큼 추가 회복량을 더해줍니다. 해당시간만큼 연속으로 붕대를 감았기 때문에 해당 공식이 성립합니다. 5-4. health_limit을 초과한 경우 health값을 최대 체력으로 갱신해줍니다.
📔 정답 출력 | 반환
현재 체력 health를 반환합니다.
📕 Code
📔 Python3
def solution(bandage, health, attacks):
health_limit = health
cure_time, cure_amount_per_sec, bonus_cure = bandage
for i in range(len(attacks)):
attack_time, attack_damage = attacks[i]
health -= attack_damage
if health <= 0:
return -1
if i == len(attacks) - 1:
break
time_left_for_next_attack = attacks[i+1][0] - attack_time - 1
health += time_left_for_next_attack * cure_amount_per_sec
health += time_left_for_next_attack // cure_time * bonus_cure
if health > health_limit:
health = health_limit
return health
*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.
'Algorithm > Implementation' 카테고리의 다른 글
(Python3) - 프로그래머스(코딩 기초 트레이닝): 정수를 나선형으로 배치하기 (0) | 2024.11.14 |
---|---|
(Python3) - 프로그래머스(PCCE 기출문제): 2번 피타고라스의 정리 (1) | 2024.11.13 |
(Python3) - 프로그래머스(연습문제): 대충 만든 자판 (0) | 2024.11.10 |
(Python3) - 프로그래머스(연습문제): 공원 산책 (0) | 2024.11.10 |
(Python3) - 프로그래머스(연습문제): 달리기 경주 (0) | 2024.11.10 |