푼 날짜 : 2024.01.29
푼 문제 : [PCCP 기출문제] 1번 / 붕대 감기 문제 풀어보기
사용한 언어 : python
파라미터 설명 :
bandage | 기술의 시전 시간, 1초당 회복량, 추가 회복량을 담은 1차원 정수 배열 |
health | 최대 체력을 의미하는 정수 |
attacks | 몬스터의 공격 시간과 피해량을 담은 2차원 정수 배열 |
전체 코드 :
def solution(bandage, health, attacks):
answer = health
idx = 1
check = 0
for i in range(1, attacks[-1][0]+1):
for j in attacks:
if idx == j[0]:
answer -= j[1]
check = 0
idx += 1
break
if i == idx:
idx += 1
answer += bandage[1]
check += 1
if check == bandage[0]:
answer += bandage[2]
check = 0
if answer > health:
answer = health
if answer < 1:
return -1
return answer
코드 설명 :
우리는 최종적으로 값을 answer에 담아 return 할 것이다.
def solution(bandage, health, attacks):
answer = health
idx = 1
check = 0
우선 초기에는 최대 체력을 가지고 있기 때문에 answer에 최대 체력 health를 담아주었다.
idx는 t초를 체크를 위한 변수이며 check는 기술 연속 사용을 확인하기 위한 변수이다.
for i in range(1, attacks[-1][0]+1): # 몬스터의 마지막 공격 초까지 반복
for j in attacks: # 몬스터 공격 배열 반복
if idx == j[0]: # idx와 몬스터 공격 초가 일치하는 경우
answer -= j[1]
check = 0
idx += 1
break
몬스터의 마지막 공격 초까지 반복을 진행하기 위해 attack배열의 마지막 요소에서 초를 뽑아와 반복한다.
idx와 비교하기 위해 range는 1부터 attacks[-1][0] 에 1을 더한 수로 지정한다.
우선 attacks배열을 반복하며 현재 초인 idx와 일치하는 공격 초가 있는지 확인하여 있다면 해당 초의 피해량만큼 체력을 줄인다.
또한 check를 0으로 초기화하고 초를 1증가시키며 반복문을 break를 사용하여 중단한다.
if i == idx: # 반복문의 인덱스와 idx가 일치하는 경우
answer += bandage[1]
check += 1
if check == bandage[0]:
answer += bandage[2]
check = 0
idx += 1
조건문으로 반복문의 인덱스와 idx를 비교한다.
i) 만약 위의 코드에서 몬스터에게 공격을 당했다면 idx가 증가하여 반복문의 인덱스와 일치하지 않을 것이며
ii) 만약 반복문의 인덱스와 idx가 일치한다면 몬스터에게 공격을 받지 않는 초이므로 기술을 시전 하는 아래의 코드를 실행 할 것이다.
조건문 안으로 들어올 경우 bandage[1] 만큼의 피를 회복하고 check를 1만큼 증가시킨다.
이후 check와 bandage[0]이 같은지 비교하고 같다면 연속 성공한 것이므로 추가 최력 bandage[2]를 추가로 회복하고 check는 0으로 초기화한다.
이후 1초가 지났으므로 idx를 1만큼 증가시킨다.
if answer > health: # answer가 최대 체력인 health보다 클 경우 health값으로 변경
answer = health
if answer < 1: # answer가 0 이하로 떨어지는 경우
return -1
위의 과정을 다 진행했다면 다음 초 반복문을 실행하기 전 2가지를 확인한다.
- answer가 최대 체력인 health보다 큰 경우
- answer가 0이하로 떨어지는 경우
1의 경우에는 answer값을 최대 체력값인 health 값으로 변경하고 2의 경우에는 바로 -1을 리턴하도록 한다.
return answer
위의 반복문이 모두 끝나고 -1을 리턴한 경우가 아니라면 최종 체력인 answer을 리턴한다.
'Programming > Algorithm' 카테고리의 다른 글
[백준14940] / 쉬운 최단거리 - 그래프(BFS) (1) | 2024.07.25 |
---|---|
[백준11727] / 2×n 타일링 2 - DP (0) | 2024.07.24 |
[백준11726] / 2×n 타일링 - DP (0) | 2024.07.24 |
[프로그래머스] [연습문제] / 추억 점수 (0) | 2024.04.30 |
[프로그래머스] [연습문제] / 달리기 경주 (0) | 2024.04.30 |