[문제]

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)