스터디/알고리즘
[백준 22864] 피로도
덩이
2022. 1. 10. 21:54
#include <iostream>
using namespace std;
int main(){
int A, B, C, M;
int fatigue = 0, time = 0, work = 0, rest = 0, burnout = 0;
cin >> A >> B >> C >> M;
rest = C;
burnout = M;
if(A > M){
cout << 0 << endl;
exit(0);
}
while(1){
fatigue += A;
if(fatigue>burnout){
fatigue -= A;
fatigue -= rest;
if(fatigue < 0){
fatigue = 0;
}
}
else{
work += B;
}
time++;
if(time == 24){
cout << work << endl;
break;
}
}
return 0;
}
fiatigue가 음수이면 0이 되는 조건이 있다는 것을 빼먹어서 바로 통과되지 못했다
가장 먼저 fatigue에 입력된 피로도(A) 값을 더해주고
만약 burnout보다 그 값이 크다면 더 이상의 일은 불가능하므로 fatigue에서 A를 빼주어 휴식을 먼저 취하게 해줌 (fatigue-rest)
만약 burnout보다 그 값이 작다면 work에 일의 양(B)를 더해줌
두 가지 경우 모두 작업 시간은 한 시간 지나므로 time 1 증가 처리를 해줌 (24가 되기까지)