알고리즘 연습/구현, 문자열

[Lv.1 / 프로그래머스 / 파이썬] 붕대 감기 (PCCP 기출문제 1번)

김세진 2023. 12. 7. 22:19
반응형

 

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

풀이

 

 

주어진 조건대로 시뮬레이션하여 결과를 return 하는 문제이다.

마지막 공격 시간을 배열에서 구해 for문으로 초 단위로 순회하며 시뮬레이션 하며 해결했다.

attacks 배열을 딕셔너리 형태로 변형하여 시간 복잡도를 확보하도록 하자.

 

 

def solution(bandage, health, attacks):
    t, x, y = bandage
    max_health = health
    end_time = attacks[-1][0]
    attacks = {attack[0]:attack[1] for attack in attacks}
    
    cur_t = 0
    cur_health = health
    
    for i in range(end_time + 1):
        # 공격
        if i in attacks:
            cur_t = 0
            cur_health -= attacks[i]
            
            # 사망
            if cur_health <= 0:
                return -1
            continue
        
        # 공격받지 않음
        cur_t += 1
        cur_health += x
        
        # 추가 회복
        if cur_t == t:
            cur_health += y
            cur_t = 0
            
        cur_health = min(cur_health, max_health)
    
    return cur_health

 

 

 

반응형