Programming/백준
[브론즈 2] 백준 1173 - 운동 (파이썬)
pental
2025. 5. 1. 20:47

https://www.acmicpc.net/problem/1173
풀이
- 현재 맥박 : m, 최대 맥박 : M
- 운동 할 때마다 맥박 T만큼 증가
- 쉬면 맥박 R만큼 감소
- 운동을 N번 해야한다.
- 현재 맥박이 M을 초과하면 운동을 못한다.
- 운동을 못할 때는 쉬어야한다.
- 운동 N번을 완료하는 데 걸리는 시간을 출력하고,
- 만약 아예 운동을 못 시작하는 상황이면 -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)