코딩테스트
프로그래머스 코테 연습 [PCCP 기출문제] 1번 / 붕대 감기
DTV
2024. 6. 21. 17:10
bandage 리스트에 [시전시간, 초당회복량, 추가회복량] , 초당 회복 되다가 시전시간이 되면 추가회복량추가 이후 시간리셋
health 리스트에 [최대체력] 최대체력으로 시작합니다., 최대체력 이상 회복 불가능
attacks 리스트에 [공격시간, 공격량], bandage 시전시간 리셋필요
공격시간만 체크하면 됨 다만 공격시간전까지의 회복량을 계산함. 무식하게 시계를 돌려 계산했음. 시전시간은 주기가 왔을때와 공격당했을때 2번 리셋해줘야 에러가 없음
def solution(bandage, health, attacks):
answer = 0
start = 1
end = attacks[-1][0]+1
maxHealth = health
maxtime = bandage[0]
laptime = 0
persec = bandage[1]
prize = bandage[2]
for attack in attacks:
attackTime = attack[0]
damage = attack[1]
for t in range(start,attackTime):
health += persec
laptime += 1
if laptime >= maxtime:
health += prize
laptime = 0
if health>maxHealth:
health = maxHealth
health -= damage
laptime = 0
if health <= 0:
break
start = attackTime+1
if health <= 0:
health = -1
return health
공격시간까지의 회복량을 시전시간의 주기를 계산해 추가체력을 한줄에 계산하고 start시간을 += i + 1로 간략화
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