본문 바로가기

Algorithm/Math

(C++) - 백준(BOJ) 1173번 : 운동

반응형

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

 

22864번: 피로도

첫 번째 줄에 $A$, $B$, $C$, $M$이 공백으로 구분되어 주어진다. (하루는 24시간이다.) 맨 처음 피로도는 0이다.

www.acmicpc.net

 

수학 + greedy 문제였습니다.

 

📕 풀이방법

📔 입력 및 초기화

 일한 양을 저장할 변수 work, 피로도 변수 tired, a, b, c, m을 선언합니다.

 * int 범위 초과할 수 있으므로 long long으로 선언합니다.

 

📔 풀이과정

 1. 24시간동안 일할 수 있으면 일 해줍니다. 일을 하고 work += b, 피로도가 a만큼 올랐으니 tired + a 해줍니다.

 2. 일할 수 없다면 쉬어줍니다. tired -= c 해주며 tired음수면 0으로 다시 저장해줍니다.

 

📔 정답출력

work를 출력합니다.


📕 Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll a, b, c, m, work, tired;
int main(){
    cin >> a >> b >> c >> m;
    for(int i = 1; i <= 24; i++){
        if(tired + a <= m){
            tired += a;
            work += b;
        }
        else{
            tired -= c;
            if(tired < 0) tired = 0;
        }
    }
    cout << work;
}