연습장
27. 붕대 감기 본문
bandage = [ 시전시간, 초당 회복량, 추가 회복량]
추가회복량이란 시전시간 동안 몬스터에게 공격당하지 않으면 추가로 회복되는량
health : 최대 체력 ( 이 이상 회복 할 수 없음)
attacks = [공격시간, 피해량]
몬스터가 공격하는 시간에는 회복 불가능
체력이 0 이하가 되면 회복 불가능 -1 을 리턴
목표 : 마지막 공격을 맞고 남은 피 or 도중에 죽는다면 -1 을 반환
1초단위로 상태를 계속해서 변화해야되나?
현재 체력 / 연속성공 / 진행시간
현재 체력은 : 최대체력 >= 최대체력 + 초당회복량 - 몬스터의 공격
연속 성공 : 몬스터의 공격 하는 시간 간격에 따라 0에서 bandage[0] 까지 변화
진행시간은 1초부터 attacks[-1][0] 초 까지 진행된다.
시간별 행동으로 생각하면 될 것 같다.
1. 몬스터가 공격하는 시간인가 ?
-> 몬스터 공격력 만큼 현재 체력 감소
-> 연속 성공 0
2. 공격하지 않는다.
-> 현재 체력 == 최대치인가?
-> yes : 회복하지않음
-> no : bandage[1] 만큼 회복
-> 연속 성공 1 증가
-> 연속 성공 == bandage[0] 인가 ?
-> yes : 0 으로 변환 , bandage[2] 만큼 체력 회복
3. 마지막 attack 시 체력 감소 후 종료
def solution(bandage, health, attacks):
hp = health # 현재 체력
count = 0 # 연속 성공
attack_time = []
attack_dic = {}
# 공격 관련 저장
for i in attacks:
attack_time.append(i[0])
attack_dic[i[0]] = i[1]
# 진행 시간
for time in range(1,attacks[-1][0]):
# 공격
if time in attack_time:
hp = hp - attack_dic[time]
count = 0
# hp 가 0 이하일 경우
if hp <= 0 :
return -1
# 공격하지 않음
else :
if hp < health:
# 기본 회복량
hp = hp + bandage[1]
count += 1
# 연속회복이 조건을 만족할 경우
if count == bandage[0] :
hp = hp + bandage[2]
# 최대치를 넘을 경우
if hp >= health:
hp = health
# 마지막 공격
hp = hp - attacks[-1][1]
# hp 가 0 이하일 경우
if hp <= 0:
return -1
return hp
무언가 예외 케이스가 있다. 이런 경우가 제일 찾기 어렵다..
찾아보니 공격받지 않는 경우에서 로직에 문제가 있었다.
def solution(bandage, health, attacks):
hp = health # 현재 체력
count = 0 # 연속 성공
attack_time = []
attack_dic = {}
# 공격 관련 저장
for i in attacks:
attack_time.append(i[0])
attack_dic[i[0]] = i[1]
# 진행 시간
for time in range(1,attacks[-1][0]):
# 공격
if time in attack_time:
hp = hp - attack_dic[time]
count = 0
# hp 가 0 이하일 경우
if hp <= 0 :
return -1
# 공격하지 않음
else :
hp = hp + bandage[1]
count += 1
# 추가회복 조건
if count == bandage[0] :
hp = hp + bandage[2]
count = 0
# 최대치를 넘을 경우
if hp >= health:
hp = health
# 마지막 공격
hp = hp - attacks[-1][1]
# hp 가 0 이하일 경우
if hp <= 0:
return -1
else :
return hp
'프로그래머스 > 1단계' 카테고리의 다른 글
29. 다트 게임 (1) | 2024.01.22 |
---|---|
28. 가장 많이 받은 선물 (0) | 2024.01.22 |
26. 신고 결과 받기 (1) | 2024.01.22 |
25. 공원 산책 (0) | 2024.01.22 |
24. 달리기 경주 (0) | 2024.01.22 |