문제풀이/BOJ
[Python] BOJ/백준 1173번 운동
서채리
2021. 7. 9. 14:32
[문제]
https://www.acmicpc.net/problem/1173
1173번: 운동
첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.
www.acmicpc.net

[풀이]
sys.stdin.readline()이 기존에 쓰던 입력 방식보다 빠른 입력이라고 해서 바꿨다.
# N, m, M, T, R = map(int, input().split()) 밑 방법보다 시간복잡도가 안좋음
N, m, M, T, R = map(int, sys.stdin.readline().split())
1) 운동을 할 수 없는 경우
초기 맥박 + 운동 시 증가하는 맥박 > 최대 맥박 일 경우 운동을 할 수 없으므로 반복문을 나온다.
2) 운동
현재 맥박인 pulse + 운동 시 증가하는 맥박 <= 최대 맥박 일 경우 운동을 할 수 있다.
이 경우 pulse += 운동시 증가하는 맥박 T, 운동한 시간인 ex_minute을 1 증가시켜준다.
3) 휴식
pulse + 운동 시 증가하는 맥박 > 최대 맥박 일 경우 휴식을 하게 되는데
pulse - R이 m보다 작을 때 pulse는 m이기 때문에 max(pulse - R, m)로 비교해 pulse값에 넣었다.
[코드]
import sys
if __name__ == '__main__':
N, m, M, T, R = map(int, sys.stdin.readline().split())
minute, ex_minute = 0, 0
pulse = m
while ex_minute < N:
# 운동을 할 수 없는 경우
if m + T > M:
break
# 운동
if pulse + T <= M:
pulse += T
ex_minute += 1
# 휴식
else:
pulse = max(pulse - R, m)
minute += 1
print(minute if ex_minute == N else -1)