문제
하루에 한 시간 단위로 일을 하거나 일을 쉬어도 된다. 하루에 한 시간 일하면 피로도는 A 만큼 쌓이고 일은 B 만큼 처리할 수 있다.
만약에 한 시간을 쉰다면 피로도는 C 만큼 줄어든다. 단, 피로도가 음수로 내려가면 0으로 바뀐다. 당연히 일을 하지 않고 쉬었기 때문에 처리한 일은 없다.
피로도를 최대한 M 을 넘지 않게 일을 하려고 한다. M 를 넘기면 일하는데 번아웃이 와서 이미 했던 일들도 다 던져버리고 일을 그만두게 된다.
번아웃이 되지 않도록 일을 할때 하루에 최대 얼마나 일을 할 수 있는지 구해보자. 하루는 24시간이다.
입력
첫 번째 줄에 네 정수 A , B , C , M 이 공백으로 구분되어 주어진다.
맨 처음 피로도는 0이다.
출력
하루에 번 아웃이 되지 않도록 일을 할 때 최대 얼마나 많은 일을 할 수 있는지 출력한다.
제한
- 1≤A≤1,000,000
- 1≤B≤10,000
- 1≤C≤10,000
- 1≤M≤1,000,000
예제 입력 1 복사
5 3 2 10
예제 출력 1 복사
24
예제 입력 2 복사
10 5 1 10
예제 출력 2 복사
15
예제 입력 3 복사
11 5 1 10
예제 출력 3 복사
0
[소스 코드]
a : 일을 할 때 쌓이는 피로도
b : 1시간동안 할 수 있는 일의 양
c : 휴식을 취했을 때 회복되는 피로도
m : 한계 피로도
result : 24시간동안 한 일의 양
t : 현재 쌓인 피로도
day : 시간
if : 피로도의 한계보다 일을 했을 때 쌓이는 피로도가 더 클 경우 일을 할 수 없으므로 0 출력
else :
while : 24시간이 지나지 않았으면 계속 일을 함, 1시간씩 시간이 지남(day값 증가)
if : 일을 했을 때 피로도를 넘기면 안되기 때문에 현재 피로도에 a를 더한 값이 m을 초과하게 되면 휴식을 취해야 하기에 일을 할 수 있는지 여부를 확인한다
a,b,c,m = map(int,input().split())
result = 0
t = 0
day=0
if a>m:
print(0)
else:
while day!=24:
day+=1
if t+a<=m:
result+=b
t+=a
else:
if t-c>=0:
t-=c
else:
t=0
print(result)
매우 간단한 문제지만 굉장히 많이 틀렸다,
마지막 print문을 else문 안에 넣었어야 했는데 실수로 제일 바깥쪽에 작성해서 한참을 헤맸다.
아무리봐도 잘못한게 없는데 자꾸 틀리니까 미쳐버리는 줄 알았다.
확인을 잘하자
'알고리즘 > python' 카테고리의 다른 글
[python/파이썬] 백준 2609 최대공약수와 최소공배수 (0) | 2022.02.12 |
---|---|
[python/파이썬] 백준 2745 진법 변환 (0) | 2022.02.11 |
[python/파이썬] 백준 2346 풍선 터뜨리기 (0) | 2022.02.10 |
[python/파이썬] 백준 1966 프린터 큐 (0) | 2022.02.09 |
[python/파이썬] 백준 5618 공약수 (0) | 2022.02.09 |