본문 바로가기
Algorithm/Simulation

[파이썬] 프로그래머스 : 붕대 감기 (Lv.1)

by 베짱이28호 2024. 3. 25.

[파이썬] 프로그래머스 : 붕대 감기 (Lv.1)

 

프로그래머스

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

programmers.co.kr


풀이

방향성 생각

  • iteration을 모두 돌려도 되지만 비효율적이다.
  • 시간 차이에서 몫, 나머지를 사용해서 효율적으로 푸는게 정해인듯.
  • 공격 - 회복 - 공격 - 회복 순서로 진행된다.
  • 회복 시, 이전에 공격을 받은 시간이 필요하다.
  • 예외 처리를 해줘야하므로 첫 번째 공격을 먼저 받고
  • 공격 / (회복-공격) ... 순으로 진행한다.
  • 마지막은 회복 안해도 되는게 살아남으면 바로 리턴해주면 된다.

전체코드

def solution(bandage, health, attacks):
    
    prepare,regen,bonus = bandage
    hp = health
    
    # 공격
    _,dmg = attacks[0]
    hp -= dmg
    if hp <= 0: return -1
        
    for i in range(1,len(attacks)):

        # 회복
        dt = attacks[i][0]-attacks[i-1][0]-1
        p,q = divmod(dt,prepare)
        hp += regen*dt + bonus*p   
        if hp > health: hp = health

        # 공격
        time,dmg = attacks[i]
        hp -= dmg
        if hp <= 0:
            return -1

    return hp

코멘트

정답률이 낮아서 풀었는데 그냥 초보자들 푸는 문제라 그런듯?

댓글