✏️ 문제
문제 파악
중요한 건 문제를 잘 읽는 것..!
조건은 다음과 같다.
- 공격을 받으면
- 초당 회복 X
- 연속 성공 = 0
- 현재 체력 -= 피해량
- 공격을 받지 않으면
- 초당 회복 O
- 연속 성공 += 1
- if 연속 성공 == 시전 시간:
- 현재 체력 += 추가 회복량
- 연속 성공 = 0
- if 현재 체력 > 최대 체력:
- 현재 체력 = 최대 체력
- 현재 체력 <= 0일 시 -1 출력
여기서 나의 킥(ㅎㅎ)은 시간이 attack[n][0]의 값과 같은 지 시간이 업데이트될 때마다 attack의 전체를 돌아서 확인하도록 한 것이 아니라 맨 앞인 attack[0][0]만 비교하여 같다고 처리되면 pop()을 통해 맨 앞을 없애 시간복잡도를 줄였다.
코드
def solution(bandage, health, attacks):
cur_health = health
count = 0
for i in range(1, attacks[len(attacks)-1][0]+1):
# 공격 여부
if i != attacks[0][0]:
count += 1 # 1
# 연속 성공
if count == bandage[0]:
cur_health += bandage[2]
count = 0
# 체력 회복
cur_health += bandage[1] # 5
if cur_health > health:
cur_health = health
else:
cur_health -= attacks[0][1]
count = 0
attacks.pop(0)
# 사망
if cur_health <= 0:
cur_health = -1
break
return cur_health
- 다른 사람의 풀이
def solution(bandage, health, attacks):
hp = health
start = 1
for i, j in attacks:
hp += ((i - start) // bandage[0]) * bandage[2] + (i - start) * bandage[1]
start = i + 1
if hp >= health:
hp = health
hp -= j
if hp <= 0:
return -1
return hp
천재... 공격을 받을 때 이전 회복량을 한 번에 계산하셨다.....
(나도 이런 생각을 할 수 있도록 많이 풀어서 경험을 쌓아야지 ..ㅠ)
'PS > 프로그래머스' 카테고리의 다른 글
[Python] 공원 산책 (0) | 2024.11.01 |
---|---|
[Python] 10번 / 데이터 분석 (0) | 2024.11.01 |
[Python] 햄버거 만들기 (0) | 2024.10.31 |
[Python] 체육복 (0) | 2024.10.31 |
[Python] 키패드 누르기 (0) | 2024.10.31 |