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


없음.. 아이디어가 도저히 안 떠올랐다.
수학공식을 세워서 구현하려고 했는데, 검색해보니까 단순히 수학공식으로 풀 수 있는 문제가 아니었다..!
import java.io.*;
import java.util.*;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
/**
*
* 24시간동안
* aSum이 현재 피로도이다. a를 더해도 m 이하라면, 무조건 일을 한다.
* 피로도는 a만큼 증가한다.
*
* 일을 하면 피로도가 m을 넘을 경우, 무조건 휴식한다.
* 주의) 현재 피로도가 음수라면 0으로 수정한다.
*/
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int sum = 0;
int aSum = 0;
for (int i = 0; i < 24; i++) {
if (aSum + a <= m) {
sum += b;
aSum += a;
} else {
aSum -= c;
if (aSum < 0) {
aSum = 0;
}
}
}
System.out.println(sum);
}
}
생각보다 풀이는 간단했다. 답안을 보고나면 쉬운데.. 바로바로 생각해내기는 어려운 아이디어인 것 같다. 아직 그리디 알고리즘을 수월하게 풀려면 데이터가 더 쌓여야할 것 같다 ㅠㅠ..