PS/프로그래머스

[Python] 1번 / 붕대 감기

s_omi 2024. 11. 1. 09:29

✏️ 문제

 

문제 파악

중요한 건 문제를 잘 읽는 것..! 

조건은 다음과 같다.

  • 공격을 받으면
    • 초당 회복 X
    • 연속 성공 = 0
    • 현재 체력 -= 피해량
  • 공격을 받지 않으면
    • 초당 회복 O
    • 연속 성공 += 1
    • if 연속 성공 == 시전 시간:
      • 현재 체력 += 추가 회복량
      • 연속 성공 = 0
    • if 현재 체력 > 최대 체력:
      • 현재 체력 = 최대 체력
  • 현재 체력 <= 0일 시 -1 출력

여기서 나의 킥(ㅎㅎ)은 시간이 attack[n][0]의 값과 같은 지 시간이 업데이트될 때마다 attack의 전체를 돌아서 확인하도록 한 것이 아니라 맨 앞인 attack[0][0]만 비교하여 같다고 처리되면 pop()을 통해 맨 앞을 없애 시간복잡도를 줄였다. 

 

 

코드

def solution(bandage, health, attacks):
    cur_health = health
    count = 0
    
    for i in range(1, attacks[len(attacks)-1][0]+1):
        # 공격 여부
        if i != attacks[0][0]:
            count += 1 # 1
            
            # 연속 성공
            if count == bandage[0]:
                cur_health += bandage[2]
                count = 0
            
            # 체력 회복
            cur_health += bandage[1] # 5
            if cur_health > health:
                cur_health = health
            
        else:
            cur_health -= attacks[0][1]
            count = 0
            attacks.pop(0)
        
        # 사망
        if cur_health <= 0:
            cur_health = -1
            break
            
    return cur_health
  • 다른 사람의 풀이
def solution(bandage, health, attacks):
    hp = health
    start = 1
    
    for i, j in attacks:
        hp += ((i - start) // bandage[0]) * bandage[2] + (i - start) * bandage[1]
        start = i + 1
        
        if hp >= health:
            hp = health
            
        hp -= j
        
        if hp <= 0:
            return -1
    return hp

 

천재... 공격을 받을 때 이전 회복량을 한 번에 계산하셨다.....

(나도 이런 생각을 할 수 있도록 많이 풀어서 경험을 쌓아야지 ..ㅠ)

'PS > 프로그래머스' 카테고리의 다른 글

[Python] 공원 산책  (0) 2024.11.01
[Python] 10번 / 데이터 분석  (0) 2024.11.01
[Python] 햄버거 만들기  (0) 2024.10.31
[Python] 체육복  (0) 2024.10.31
[Python] 키패드 누르기  (0) 2024.10.31