728x90
문제
영식이가 운동을 하는 과정은 1분 단위로 나누어져 있다.
매 분마다 영식이는 운동과 휴식 중 하나를 선택해야 한다.
운동을 선택한 경우, 영식이의 맥박이 T만큼 증가한다.
즉, 영식이의 맥박이 X였다면, 1분 동안 운동을 한 후 맥박이 X+T가 되는 것이다.
영식이는 맥박이 M을 넘는 것을 원하지 않기 때문에, X+T가 M보다 작거나 같을 때만 운동을 할 수 있다.
휴식을 선택하는 경우 맥박이 R만큼 감소한다.
즉, 영식이의 맥박이 X였다면, 1분 동안 휴식을 한 후 맥박은 X-R이 된다.
맥박은 절대로 m보다 낮아지면 안된다. 따라서, X-R이 m보다 작으면 맥박은 m이 된다.
영식이의 초기 맥박은 m이다. 운동을 N분 하려고 한다.
이때 운동을 N분하는데 필요한 시간의 최솟값을 구해보자. 운동하는 시간은 연속되지 않아도 된다.
https://www.acmicpc.net/problem/1173
입력
첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.
출력
첫째 줄에 운동을 N분하는데 필요한 시간의 최솟값을 출력한다.. 만약 운동을 N분 할 수 없다면 -1을 출력한다.
제한
1 ≤ N, T, R ≤ 200
50 ≤ m ≤ M ≤ 200
예제
#1
__input__
5 70 120 25 15
__output__
10
#2
__input__
100 50 100 5 200
__output__
109
#3
__input__
1 60 70 11 11
__output__
-1
#4
__input__
200 50 200 150 1
__output__
30050
#5
__input__
19 89 143 17 13
__output__
40
문제 풀이
N,m,M,T,R = map(int,input().split())
m_1 = m
cnt = ans = 0
while N > cnt:
if m_1 > M or m_1+T > M: # 운동 불가 조건
break
if m + T <= M:
m += T
cnt += 1 # 운동 수행 횟수
else:
m = max(m_1,m-R) # 초기 맥박보다 작아질 수 없기에 둘 중 큰 값
ans += 1 # 전체 소요 시간
print(ans) if N == cnt else print(-1)
파이썬을 독학하시는 분들에게 도움이 되길 바라며,
혹 더 좋은 방법이 있거나 오류가 있다면 편하게 말씀 부탁드립니다.
728x90