하루에 한 시간 단위로 일을 하거나 일을 쉬어도 된다. 하루에 한 시간 일하면 피로도는 만큼 쌓이고 일은 만큼 처리할 수 있다.
만약에 한 시간을 쉰다면 피로도는 만큼 줄어든다. 단, 피로도는 절대 0보다 작아질 수 없다. 당연히 일을 하지 않고 쉬었기 때문에 처리한 일은 없다.
피로도를 최대한 을 넘지 않게 일을 하려고 한다. 를 넘기면 일하는데 번아웃이 와서 이미 했던 일들도 다 던져버리고 일을 그만두게 된다.
번아웃이 되지 않도록 일을 할때 하루에 최대 얼마나 일을 할 수 있는지 구해보자.
if __name__ == '__main__':
A, B, C, M = map(int, input().split())
fatigue = 0
work = 0
for i in range(1, 25):
if fatigue + A <= M:
fatigue += A
work += B
else:
fatigue -= C
if fatigue < 0:
fatigue = 0
print(work)
원래는 수학공식을 활용해 O(1)시간으로 풀려고했다.
피로도 = Ax - C(24 - x) <= M
일 = Bx
이때 가장 큰 정수 x를 구해서 문제를 풀려했으나 피로도가 음수가 되면 0으로 맞춰줘야 하는 부분에 문제가 있었는지 항상 84퍼에서 틀렸다고 나오게 되었다.
때문에 반복문으로 문제를 풀게되었다.