스터디/알고리즘

[백준 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가 되기까지)