https://www.acmicpc.net/problem/22864
22864번: 피로도
첫 번째 줄에 네 정수 $A$, $B$, $C$, $M$이 공백으로 구분되어 주어진다. 맨 처음 피로도는 0이다.
www.acmicpc.net
문제
하루에 한 시간 단위로 일을 하거나 일을 쉬어도 된다. 하루에 한 시간 일하면 피로도는 A만큼 쌓이고 일은 B만큼 처리할 수 있다.
만약에 한 시간을 쉰다면 피로도는 A만큼 줄어든다. 단, 피로도가 음수로 내려가면 0으로 바뀐다. 당연히 일을 하지 않고 쉬었기 때문에 처리한 일은 없다.
피로도를 최대한 M을 넘지 않게 일을 하려고 한다. M을 넘기면 일하는데 번아웃이 와서 이미 했던 일들도 다 던져버리고 일을 그만두게 된다.
번아웃이 되지 않도록 일을 할때 하루에 최대 얼마나 일을 할 수 있는지 구해보자. 하루는 24시간이다.
입력
첫 번째 줄에 네 정수 A, B, C, M이 공백으로 구분되어 주어진다.
맨 처음 피로도는 0이다.
출력
하루에 번 아웃이 되지 않도록 일을 할 때 최대 얼마나 많은 일을 할 수 있는지 출력한다.
예제 입력 1
5 3 2 10
예제 출력 1
24
예제 입력 2
10 5 1 10
예제 출력 2
15
예제 입력 3
11 5 1 10
예제 출력 3
0
문제 이해
- 하루에 한 시간 일하면 피로도 A만큼, 일은 B만큼 증가합니다.
- 한시간 휴식을 취하면 피로도가 C만큼 감소하나, 일을 안했으므로 그대로입니다.
- 피로도는 음수일 경우 항상 0이 되며, 일을 못하므로 당연히 일도 그대로 입니다.
- 피로도는 M을 넘길 경우 번아웃이 오게되므로, 이를 넘기면 안됩니다.
문제 풀이
- 문제의 조건을 생각하며 직접 그려보거나 구체화시키면 쉽게 규칙을 발견할 수 있습니다.
- 일을 할 수 있을 때와 쉬어어 할 때로 크게 구분지어놓고, 현재 피로도에서 일을 더 할 수 있으면 일을 계속 진행합니다.
- 이 때, 증가하는 피로도양, 일 양, 시간을 체크합니다.
- 만약 현재 피로도에서 일을 더 하면 안될 경우, 쉬어야하므로 피로도를 감소시키고 시간을 체크합니다.
- 이를 계속 반복하며, 하루 기준이므로 총 시간이 23을 넘어가면 종료합니다.
코드
'알고리즘 풀이 > Python' 카테고리의 다른 글
[Python] 프렌즈4블록 (프로그래머스 Lv2 파이썬) (0) | 2023.09.20 |
---|---|
[Python] 피로도 (프로그래머스 Lv2 파이썬) (0) | 2023.09.19 |
[Python] 분해합 (백준 2231번 파이썬) (0) | 2023.09.18 |
[Python] 블랙잭 (백준 2798 파이썬) (1) | 2023.09.18 |
[Python] 시각 (백준 18312번 파이썬) (0) | 2023.09.18 |