본문 바로가기
알고리즘(Algorithm)/백준(Baekjoon)

[백준/22864번/Python] 피로도 문제

by 왁왁s 2022. 7. 28.

문제

하루에 한 시간 단위로 일을 하거나 일을 쉬어도 된다. 하루에 한 시간 일하면 피로도는 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

 

문제 풀이

하루는 24시간으로 반복문의 반복 횟수를 24로 정한다.

피로도(pirodo)와 작업량(work)에 해당하는 변수를 선언하여 반복문 안에

최대 피로도와의 비교, 그리고 최대 피로도를 초과한 경우의 조건문을 사용한다.

또한 최대 피로도를 초과했을 때 예제 입력3과 같이 입력 값에서 최대값보다 높은 값을 입력했을 때를 대비해

pirodo > M #번아웃 조건문을 사용해주었다.

코드

#피로도 A, 일처리 B, 1시간 -피로도 C, 최대 피로도 M
import sys

A, B, C, M = map(int, sys.stdin.readline().split())

hour = 0 #하루 24시간
pirodo = 0 #피로도 체크
work = 0

while(hour != 24): #하루 24시간
  hour += 1
  if(pirodo + A <= M): #최대 피로도와 비교
    pirodo += A
    work += B
  else: #최대 피로도 초과한 경우
    if(pirodo > M): #번아웃
      work = 0
      break
    else:
      pirodo -= C
      if(pirodo < 0):
        pirodo = 0

print(work)

댓글