본문 바로가기
코딩테스트/백준

[백준/Python] 22864_피로도_Python 풀이

by vulter3653 2022. 4. 16.

https://www.acmicpc.net/problem/22864

 

22864번: 피로도

첫 번째 줄에 네 정수 $A$, $B$, $C$, $M$이 공백으로 구분되어 주어진다. 맨 처음 피로도는 0이다.

www.acmicpc.net

피로도

시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
1초 1024 MB 1478 610 543 44.075%

문제


하루에 한 시간 단위로 일을 하거나 일을 쉬어도 된다. 하루에 한 시간 일하면 피로도는  만큼 쌓이고 일은  만큼 처리할 수 있다.

만약에 한 시간을 쉰다면 피로도는  만큼 줄어든다. 단, 피로도가 음수로 내려가면 0으로 바뀐다. 당연히 일을 하지 않고 쉬었기 때문에 처리한 일은 없다.

피로도를 최대한  을 넘지 않게 일을 하려고 한다.  를 넘기면 일하는데 번아웃이 와서 이미 했던 일들도 다 던져버리고 일을 그만두게 된다.

번아웃이 되지 않도록 일을 할때 하루에 최대 얼마나 일을 할 수 있는지 구해보자. 하루는 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

풀이


1. 첫 번째 줄에 네 정수 A, B, C, M이 공백으로 구분되어 주어지기에 네 정수를 input()으로 입력시킨후, split()을 통해 공백을 기준으로 구분되도록 하였고, map()을 통해 입력되어진 문자형을 int형으로 형 변환 시켜주었다.

 

2. 하루는 24시간이므로 24번 반복하도록 하였다.

 

3. 피로도가 M을 너미면 번아웃이 와서 이미 했던 일들도 다 던져버리고 일을 그만두게 되므로 이 경우 0이 출력되도록 하였다.

 

4. 피로도가 M을 넘기지만 않으면 괜찮으므로 기존의 피로도(풀이에서의 T)에 작업을 했을 때 추가되는 피로도(A)가 M을 넘기지 않을 경우 작업을 하도록 하였고, 넘기게 되면 쉬어서 기존의 피로도(풀이에서의  T)에 줄어드는 피로도(C)만큼 줄어들도록 하였다.

 

A,B,C,M = map(intinput().split()) #입력받는 값 (A: 추가되는 피로도, B: 작업량, C:감소되는 피로도, M:피로도 한계치)

T = 0                                   #피로도
DW = 0                                #최대 작업량

for i in range(24):                    #하루는 24시간이므로 24번 반복
  if T > M:                             #피로도가 M을 넘어갈 경우, 번아웃으로 작업량은 0
    print(0)
  else:
    if T + A <= M:                    #일을 할 수 있는 경우
      T += A                            #A만큼 피로도를 더하고 B만큼 작업량 추가
      DW += B
    else:                                  #일을 할 수 없는 경우
      if T - C >=0:                     #쉬어서 피로도가 C만큼 감소되었을 때 그 값이 0이상인 경우, 피로도를 C만큼 감소 
        T -= C 
      else:                               #쉬어서 피로도가 음수인 경우, 피로도는 0
        T = 0
print(DW)                              #최대 작업량 출력

#sys를 이용하여 입력한 경우

import sys

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

T = 0
DW = 0

for i in range(24):
  if T > M:
    print(0)
  else:
    if T + A <= M:
      T += A
      DW += B
    else:
      if T - C >=0:
        T -= C
      else:
        T = 0
print(DW)