문제
하루에 한 시간 단위로 일을 하거나 일을 쉬어도 된다. 하루에 한 시간 일하면 피로도는 A 만큼 쌓이고 일은 B 만큼 처리할 수 있다.
만약에 한 시간을 쉰다면 피로도는 C 만큼 줄어든다. 단, 피로도는 절대 0보다 작아질 수 없다. 당연히 일을 하지 않고 쉬었기 때문에 처리한 일은 없다.
피로도를 최대한 M 을 넘지 않게 일을 하려고 한다. M 를 넘기면 일하는데 번아웃이 와서 이미 했던 일들도 다 던져버리고 일을 그만두게 된다.
번아웃이 되지 않도록 일을 할때 하루에 최대 얼마나 일을 할 수 있는지 구해보자.
입력
첫 번째 줄에 A , B , C , M 이 공백으로 구분되어 주어진다. (하루는 24시간이다.)
맨 처음 피로도는 0이다.
출력
하루에 번 아웃이 되지 않도록 일을 할 때 최대 얼마나 많은 일을 할 수 있는지 출력한다.
수학을 이용한 간단한 구현문제였다.
번아웃 조건인 M보다 크지 않도록 피로도를 생각해서 하루 일을 구하면 된다.
추가할 변수로
a,b,c,m
총 피로도 p
총 일 work를 사용했다.
1시간 단위이므로 24시간 for문으로 매 시간마다 일할 수 있는지 없는지 여부를 고려한다.
1.일할 수 있는 경우
p+A<=M인 경우
2.쉬어야 하는 경우
p+A>M인 경우
2-1 p-C가 0미만인 경우
2-2 아닌경우
풀이
A,B,C,M=map(int,input().split())
p=0
work=0
for _ in range(24):
if p+A<=M: #일할 수 있으면
p+=A
work+=B
else:
if p-C<0:
p=0
else:
p-=C
print(work)
'코딩테스트 파이썬 > 수학' 카테고리의 다른 글
2745 진법변환 파이썬 (0) | 2021.09.06 |
---|---|
5618 공약수 (0) | 2021.09.03 |
소수 판별 (0) | 2021.09.02 |