https://school.programmers.co.kr/learn/courses/30/lessons/250137
코드 & 풀이
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
'프로그래머스 > Lv.1' 카테고리의 다른 글
2024 KAKAO WINTER INTERNSHIP > 가장 많이 받은 선물 - Python, 구현 (1) | 2024.12.08 |
---|---|
2021 KAKAO BLIND RECRUITMENT > 신규 아이디 추천 - Python, 정규표현식 (0) | 2024.12.07 |
PCCE 기출문제 > 데이터 분석 - Pyton, sorted, lambda (1) | 2024.12.07 |
2018 KAKAO BLIND RECRUITMENT > 다트 게임 - Pyton, re, compile, findall, 정규식 (2) | 2024.12.06 |
2018 KAKAO BLIND RECRUITMENT > 비밀지도 - Pyton, n진법, bin, zfill (0) | 2024.12.05 |