코딩테스트

프로그래머스 코테 연습 [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