자료구조/문제풀이
[백준 JAVA] 22864 피로도
휴먼코딩
2024. 8. 11. 03:44
22864 피로도
https://www.acmicpc.net/problem/22864
문제설명
하루 24시간 동안 작업을 수행하는 과정에서 피로도가 증가하고 감소하는 방식에 따라 최대 작업량을 계산한다.
- 피로도 증가량 (A): 작업을 할 때마다 증가하는 피로도
- 작업량 (B): 한 시간 동안 작업할 때 증가하는 작업량
- 피로도 감소량 (C): 피로도가 최대치를 넘는 경우 감소하는 피로도
- 최대 피로도 (M): 피로도의 최대치로, 이 값을 넘으면 피로도가 감소해야 함
접근방식
O(1) 상수 시간복잡도
- 반복문 내에서 사칙연산을 수행한다
문제 조건 분석 과정
피로도 증가: 현재 피로도 + A가 최대 피로도 M을 넘지 않으면 작업을 계속하고 피로도를 증가시킨다.
피로도 감소: 현재 피로도 + A가 M을 넘는 경우, 작업을 중단하고 피로도를 감소한다.
감소된 피로도는 0보다 작아지지 않도록 한다.
전체코드
import java.util.*;
import java.io.*;
public class Main_22864피로도 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] inputs = br.readLine().split(" ");
int A = Integer.parseInt(inputs[0]); //작업마다 증가하는 피로도
int B = Integer.parseInt(inputs[1]); //한 시간 작업의 작업량
int C = Integer.parseInt(inputs[2]); //피로도가 감소하는 양
int M = Integer.parseInt(inputs[3]); //최대 피로도
int currentFatigue = 0;
int totalWorkDone = 0;
int hoursInADay = 24; //하루의 총 시간
//하루 24시간 동안의 작업과 피로도
for (int i = 0; i < hoursInADay; i++) {
//현재 피로도와 작업 피로도를 더했을 때 최대 피로도를 넘지 않는 경우
if (currentFatigue + A <= M) {
currentFatigue += A; //피로도 증가
totalWorkDone += B; //작업량 증가
} else {
//피로도가 최대치를 넘는 경우 피로도 감소 (휴식)
currentFatigue -= C;
//음수 방지
if (currentFatigue < 0) {
currentFatigue = 0;
}
}
}
System.out.println(totalWorkDone);
}
}