해결방식
이 문제를 풀때는 python3를 가지고 해결하였다. 문제의 내용은 일정 시간 마다 공격을 받아 체력이 깎이거나 공격을 받지 않아 체력을 회복하거나 두개의 동작을 수행하는 프로그램이 있을때 해당 프로그램을 짜는 것이다.
그렇기 때문에 반복문과 조건문을 이용하여 문제를 해결했다.
공격 시 동작
for i in range(1,attacks[-1][0]+1) :
#공격 시간일때 동작
if i == attacks[number][0]:
answer=answer-attacks[number][1] #공격 받은 후 체력 계산
bonusCount=0 #추가 회복 시간 초기화
number=number+1 #다음 공격을 위한 공격 횟수 추가
# 체력이 0이하면 바로 종료
if answer <= 0 :
return -1
위 코드는 공격 시간때 동작을 나타낸다. 먼저 반복문은 공격시와 공격이 아닐 시 전체를 감싸는 반복문이며 1초 부터 공격의 마지막 시간까지 반복한다. 그리고 공격 시에는 공격의 피해량만큼 현재 체력이 낮아지고 추가 회복을 위한 카운트를 초기화 하고 다음 공격을 위한 공격 카운트는 1을 더한다. 그리고 공격으로 인해 현재 체력이 0이하가 되면 바로 -1을 반환하여 프로그램을 종료한다.
공격이 아닐 시 동작
#공격 시간 이외 동작
else :
bonusCount=bonusCount+1 #추가 회복 카운트
#추가 회복 조건 달성
if bonusCount == bandage[0]:
answer=answer+bandage[1]+bandage[2]
bonusCount=0
if answer >=health :
answer=health
continue
#추가 회복 조건 미달성
answer=answer+bandage[1]
#회복량이 최대 체력을 넘었을 시 조정
if answer >= health :
answer=health
위 코드는 공격이 아닐 시에 행하는 동작으로 일단 추가 회복이 있는 경우와 없는 경우로 나뉜다. 처음에 추가회복 카운트에 1을 더하고 해당 카운트가 추가 회복의 기준에 달성하면 초당 회복과 추가 회복을 동시에 진행하며 추가 회복 카운트는 다시 초기화 한다. 추가 회복이 아닐 경우 초당 회복만 진행을 한다. 그리고 모든 회복 과정에서 한계 체력을 넘길 경우 한계 체력으로 현재 체력을 설정한다.
전체 코드
위 코드를 합치면 아래 코드가 된다. 전체적인 흐름은 매 시간에 맞는 행동을 선택하며 최종적인 해답을 내는 문제이다.
def solution(bandage, health, attacks):
answer = health #현재 체력 설정
bonusCount=0 #추가 회복 카운트
number=0 #공격 횟수 카운트
for i in range(1,attacks[-1][0]+1) :
#공격 시간일때 동작
if i == attacks[number][0]:
answer=answer-attacks[number][1] #공격 받은 후 체력 계산
bonusCount=0 #추가 회복 시간 초기화
number=number+1 #다음 공격을 위한 공격 횟수 추가
# 체력이 0이하면 바로 종료
if answer <= 0 :
return -1
#공격 시간 이외 동작
else :
bonusCount=bonusCount+1 #추가 회복 카운트
#추가 회복 조건 달성
if bonusCount == bandage[0]:
answer=answer+bandage[1]+bandage[2]
bonusCount=0
if answer >=health :
answer=health
continue
#추가 회복 조건 미달성
answer=answer+bandage[1]
#회복량이 최대 체력을 넘었을 시 조정
if answer >= health :
answer=health
return answer'Algorithm > 프로그래머스' 카테고리의 다른 글
| 코딩테스트 연습 Lv1 - 2024 Kakao Winter Intership 가장 많이 받은 선물 (0) | 2024.01.05 |
|---|---|
| 코딩테스트 연습 레벨 1 2020 카카오 인턴십 키패드 누르기 문제 (2) | 2023.10.28 |
| 코딩테스트 연습 Lv1 신규아이디 추천 (0) | 2023.10.02 |
| 코딩테스트 연습 Lv1 달리기 경주 (0) | 2023.10.02 |