알고리즘

[프로그래머스/구현/LV1] PCCP 기출문제 1번

motti 2023. 12. 6. 21:04
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/250137

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

def solution(bandage, health, attacks):
    answer = 0
    #붕대 감기 기술의 시전 시간, 1초당 회복량, 추가 회복량을 담은 1차원 정수 배열 bandage 
    #최대 체력을 의미하는 정수 health
    #몬스터의 공격 시간과 피해량을 담은 2차원 정수 배열 attacks
    #[5, 1, 5]	30	[[2, 10], [9, 15], [10, 5], [11, 5]]
    
    band_time = bandage[0]
    hp_per = bandage[1]
    hp_plus = bandage[2]
    
    max_health = health
    tmp = 0
    
    for time, damage in attacks:
        
        diff_time = time - tmp - 1 # 현재시간 - 이전시간 (시간차)
        tmp = time # 이전시간 저장
        
        health += (diff_time)*hp_per + ((diff_time)//band_time)*hp_plus # 체력증가 공식

        if health > max_health: # 체력초과 방지
            health = max_health
            
        health = health - damage # 데미지 입음
        
        if health <= 0: # 이하되면 죽음
            return -1
        
    return health

풀이

1. 시간을 초마다 계산하면서 회복량을 계산할 수 있지만 한번에 회복량을 계산하고자 하였음

2. diff_time을 계산해서 바로 초당 회복량과 연속 회복량 계산 / 연속 회복량 계산시 diff_time//band_time을 통해 초기화되는 것까지 고려해서 계산 가능

3. 체력 초과 방지 및 피가 0이하가 되면 종료

반응형