Programming/백준

[브론즈 2] 백준 1173 - 운동 (파이썬)

pental 2025. 5. 1. 20:47

https://www.acmicpc.net/problem/1173

풀이

  • 현재 맥박 : m, 최대 맥박 : M
  • 운동 할 때마다 맥박 T만큼 증가
  • 쉬면 맥박 R만큼 감소
  • 운동을 N번 해야한다.
  1. 현재 맥박이 M을 초과하면 운동을 못한다.
  2. 운동을 못할 때는 쉬어야한다.
  3. 운동 N번을 완료하는 데 걸리는 시간을 출력하고,
  4. 만약 아예 운동을 못 시작하는 상황이면 -1을 출력한다.
if m + T > M :
    print(-1)
  • 현재 맥박 m에 운동 후 증가량 T를 더했을 때, M을 넘으면,
  • 아예 한 번도 운동할 수 없기에 -1을 출력하고 종료한다.
else :
    timer = 0
    X = m
    while N > 0 :
        timer += 1
  • 타이머를 0으로 초기화 하고, 현재 맥박 X를 m으로 초기화한다.
  • 운동을 N번 해야하므로, N > 0 동안만 반복한다.
  • 1분이 흐를 때 마다 timer += 1을 진행한다.
if X + T <= M :
    X += T
    N -= 1
  • 만약 현재 맥박 + 운동 증가량이 최대 맥박 M이하라면 운동이 성공하고, 맥박을 T만큼 올린다. 운동 횟수 N을 1 줄여준다.
else :
    X -= R
    X = max(X, m)
  • 운동을 못하는 상황이면, 쉬어서 맥박을 R만큼 낮춘다.
  • 다만 맥박이 m보다 내려가면 안되니까 max(X, m)으로 보정한다.

코드

# 백준 1173 - 운동
# 분류 : 구현

N, m, M, T, R = map(int, input().split())

if m + T > M :
    print(-1)
else :
    timer = 0
    X = m
    while N > 0 :
        timer += 1

        if X + T <= M :
            X += T
            N -= 1
        else :
            X -= R
            X = max(X, m)

    print(timer)