728x90
난이도 : Lv. 1
풀이일 : 2410303
https://school.programmers.co.kr/learn/courses/30/lessons/250137
문제
아이디어
- 마지막 공격까지 매 초 동안 반복문을 수행한다.
- 공격 정보는 포인터로 관리한다.
전체 풀이 코드
def solution(bandage, health, attacks):
answer = health
second = 0 # 붕대감기 지속 시간
pointer = 0 # 다음 공격
for i in range(attacks[-1][0] + 1):
# 공격을 받은 경우
if i == attacks[pointer][0]:
answer -= attacks[pointer][1]
pointer += 1
second = 0
# 공격을 받아 죽은 경우
if answer <= 0:
answer = -1
break
else: # 공격 받지 않은 경우 붕대감기
answer = min(answer + bandage[1], health)
second += 1
# 스킬 완료로 추가회복
if second == bandage[0]:
answer = min(answer + bandage[2], health)
second = 0
return answer
상세 풀이 코드
def solution(bandage, health, attacks):
answer = health
second = 0
pointer = 0
- answer : 체력의 현 상태
- second : 붕대감기 스킬 지속 시간
- pointer : 다음 공격
for i in range(attacks[-1][0] + 1):
if i == attacks[pointer][0]:
answer -= attacks[pointer][1]
pointer += 1
second = 0
if answer <= 0:
answer = -1
break
- 마지막 공격을 수행하기 위한 반복문 범위 설정
- 만약, 현재 초에 공격을 받은 경우
- 체력에서 피해량을 빼준다.
- 다음 공격을 나타내는 포인터 + 1
- 스킬의 지속시간 초기화
- 만약, 현재 공격으로 사망했다면 answer 는 -1로 초기화 후 종료
else:
answer = min(answer + bandage[1], health)
second += 1
if second == bandage[0]:
answer = min(answer + bandage[2], health)
second = 0
return answer
- 공격받지 않은 경우엔 현재 체력 + 체력회복량과 최대체력 중 작은 것을 answer에 재할당
- 스킬의 지속시간 + 1
- 스킬 지속시간이 한계치에 도달하면 스킬 사용으로 추가 회복량과 최대체력 중 작은 것을 answer에 재할당 후 스킬 지속시간 초기화
- 최종 체력 반환
'알고리즘 > Lv. 1' 카테고리의 다른 글
프로그래머스 92334 신고 결과 받기 자바 풀이 (0) | 2024.11.01 |
---|---|
프로그래머스 92334 신고 결과 받기 파이썬 풀이 (0) | 2024.11.01 |
프로그래머스 258712 가장 많이 받은 선물 파이썬 풀이 (0) | 2024.10.29 |
프로그래머스 131112 강원도에 위치한 생산공장 목록 출력하기 SQL 풀이 (1) | 2024.09.24 |
프로그래머스 59407 이름이 있는 동물의 아이디 SQL 풀이 (0) | 2024.09.22 |