본문 바로가기

알고리즘/Lv. 1

프로그래머스 250137 붕대감기 파이썬 풀이

728x90

난이도 : Lv. 1

풀이일 : 2410303

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

 

프로그래머스

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

programmers.co.kr


문제


아이디어

  • 마지막 공격까지 매 초 동안 반복문을 수행한다.
  • 공격 정보는 포인터로 관리한다.

전체 풀이 코드

def solution(bandage, health, attacks):
    answer = health
    second = 0 # 붕대감기 지속 시간
    pointer = 0 # 다음 공격
    
    for i in range(attacks[-1][0] + 1):
    	# 공격을 받은 경우
        if i == attacks[pointer][0]:
            answer -= attacks[pointer][1]
            pointer += 1
            second = 0
            # 공격을 받아 죽은 경우
            if answer <= 0:
                answer = -1
                break
        else: # 공격 받지 않은 경우 붕대감기
            answer = min(answer + bandage[1], health)
            second += 1
            # 스킬 완료로 추가회복
            if second == bandage[0]:
                answer = min(answer + bandage[2], health)
                second = 0
              
    return answer

상세 풀이 코드

def solution(bandage, health, attacks):
    answer = health
    second = 0
    pointer = 0
  • answer : 체력의 현 상태
  • second : 붕대감기 스킬 지속 시간
  • pointer : 다음 공격

 

    for i in range(attacks[-1][0] + 1):
        if i == attacks[pointer][0]:
            answer -= attacks[pointer][1]
            pointer += 1
            second = 0
            if answer <= 0:
                answer = -1
                break
  • 마지막 공격을 수행하기 위한 반복문 범위 설정
  • 만약, 현재 초에 공격을 받은 경우
    • 체력에서 피해량을 빼준다.
    • 다음 공격을 나타내는 포인터 + 1
    • 스킬의 지속시간 초기화
  • 만약, 현재 공격으로 사망했다면 answer 는 -1로 초기화 후 종료

 

        else:
            answer = min(answer + bandage[1], health)
            second += 1
            if second == bandage[0]:
                answer = min(answer + bandage[2], health)
                second = 0
              
    return answer
  • 공격받지 않은 경우엔 현재 체력 + 체력회복량과 최대체력 중 작은 것을 answer에 재할당
  • 스킬의 지속시간 + 1
  • 스킬 지속시간이 한계치에 도달하면 스킬 사용으로 추가 회복량과 최대체력 중 작은 것을 answer에 재할당 후 스킬 지속시간 초기화
  • 최종 체력 반환