본문 바로가기

Algorithm/Implementation

(Python3) - 프로그래머스(PCCP 기출문제): 1번 / 분대 감기

반응형

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

구현 문제였습니다.

📕 풀이방법

📔 입력 및 초기화

1. 최대 체력 health_limit을 선언 후 health 값으로 갱신해줍니다.

 

2. 붕대 감는(치료)시간 cure_time, 초당 회복량 cure_amount_per_sec, 치료시간만큼 치료 성공시 얻는 추가 회복량 bonus_cure를 선언 후 bandage에서 값을 가져와 저장합니다.

📔 풀이과정

공격 정보 attacks에 대해 for loop를 수행하며 다음을 진행합니다.

 

1. 현재 공격정보로부터 지역변수 공격 시간 attack_time, 피해량 attack_damage를 선언 후 저장합니다.

 

2. attack_damage만큼 피해를 받으므로 health에서 빼줍니다.

 

3. health가 음수라면 생존에 실패했으므로 -1을 반환합니다.

 

4. 마지막 공격은 데미지만 받으면 되므로 마지막 인덱스의 경우 break해줍니다.

 

5. 바로 붕대감기를 진행합니다.  5-1. 붕대를 감을 수 있는 시간은 다음 공격시간 - 현재 공격시간 - 1입니다. 연속성공시간이 0초부터 시작하기 때문에 1을 빼야됨에 주의해줍니다.  5-2. health에 붕대를 감은 시간 * 초당 회복량만큼 값을 더해줍니다.  5-3. health에 붕대를 감은 시간 // cure_time * bonus_cure 만큼 추가 회복량을 더해줍니다. 해당시간만큼 연속으로 붕대를 감았기 때문에 해당 공식이 성립합니다.  5-4. health_limit을 초과한 경우 health값을 최대 체력으로 갱신해줍니다.

📔 정답 출력 | 반환

현재 체력 health를 반환합니다.


📕 Code

📔 Python3

def solution(bandage, health, attacks):
    health_limit = health
    cure_time, cure_amount_per_sec, bonus_cure = bandage
    for i in range(len(attacks)):
        attack_time, attack_damage = attacks[i]
        health -= attack_damage
        if health <= 0:
            return -1
        if i == len(attacks) - 1:
            break
        time_left_for_next_attack = attacks[i+1][0] - attack_time - 1
        health += time_left_for_next_attack * cure_amount_per_sec
        health += time_left_for_next_attack // cure_time * bonus_cure
        if health > health_limit:
            health = health_limit
            
    return health

*더 나은 내용을 위한 지적, 조언은 언제나 환영합니다.