문제
하루에 한 시간 단위로 일을 하거나 일을 쉬어도 된다. 하루에 한 시간 일하면 피로도는A 만큼 쌓이고 일은 B 만큼 처리할 수 있다.
만약에 한 시간을 쉰다면 피로도는 C 만큼 줄어든다. 단, 피로도는 절대 0보다 작아질 수 없다. 당연히 일을 하지 않고 쉬었기 때문에 처리한 일은 없다.
피로도를 최대한 M 을 넘지 않게 일을 하려고 한다. M 를 넘기면 일하는데 번아웃이 와서 이미 했던 일들도 다 던져버리고 일을 그만두게 된다.
번아웃이 되지 않도록 일을 할때 하루에 최대 얼마나 일을 할 수 있는지 구해보자.
입력
첫 번째 줄에 A, B, C, M이 공백으로 구분되어 주어진다. (하루는 24시간이다.)
맨 처음 피로도는 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
풀이 방법
- 소소한 함정? 이 있다.
- 피로도는 절대 0보다 작아질 수 없다.
- 한시간마다 체크한다.
- 일한다면 피로도가 피로도 최대치(M)을 초과하지 않을까?
- 그렇다면 일의 양을 더한다.
- 그렇지 않다면 일을 쉬어 피로도-C를 해준다
- 단, 피로도가 0보다 작아질 상태라면 0을 유지해준다.
import sys
# 피로도는 0보다 작아질 수 없다. (1시간일하면 A만큼 피로도 쌓이고 B만큼 처리가능) 1시간 쉬면 C만큼 피로도 줄어듬 처리한 일은 0
# 피로도 M넘으면 번아웃
p = 0
value = 0
A, B, C, M = map(int, sys.stdin.readline().rstrip().split())
for i in range(24):
if p+A <= M:
p = p+A
value += B
else:
if p-C >= 0:
p = p-C
else:
p = 0
print(value)
'코딩테스트 연습 > 백준 Boj' 카테고리의 다른 글
[python] 백준 14916번 (거스름돈) (0) | 2021.12.01 |
---|---|
[Python] 백준 19532번 (수학은 비대면 강의입니다) (0) | 2021.11.30 |
[Python] 백준 1976번 (여행 가자) (0) | 2021.11.28 |
[Python] 백준 1717번 (집합의 표현) (0) | 2021.11.27 |
[Python] 백준 20040번 (사이클 게임) (0) | 2021.11.26 |
댓글