https://www.acmicpc.net/problem/22864
22864번: 피로도
첫 번째 줄에 네 정수 $A$, $B$, $C$, $M$이 공백으로 구분되어 주어진다. 맨 처음 피로도는 0이다.
www.acmicpc.net
문제풀이
그리디 + 완전탐색 문제입니다.
처음에는 피로도가 0 아래로 떨어지면 0 이라는 조건을 생각하지 않고,
1시간 단위로 일을 체크하면서 가장 최대값을 구하기 위해 Greedy 하게 푸는 생각을 하지 않아서 아래처럼 1시간 일하고 체크하고, 1시간 일하고 체크하는 것을 생각못하고
전체적인 24시간을 기준으로 구할려고 했다가 이렇게 할경우 피로도 조건을 만족시키지 못한다는 꺠닫고 아래처럼 수정했습니다.
매번 상황에 따라 선택하는 로직을 짜면됩니다.
코드
public class Main { public static int A, B, C, M; public static int result = 0; public static int x, y; public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); A = Integer.parseInt(st.nextToken()); B = Integer.parseInt(st.nextToken()); C = Integer.parseInt(st.nextToken()); M = Integer.parseInt(st.nextToken()); simulate(); System.out.println(result); } public static void simulate() { int currentWorkAmount = 0; int currentTired = 0; //24번 계산합니다. for(int i=1;i<=24;i++) { //다음 일을 하였을때 피로도가 M보다 작으면 일을하는게 맞다. if(currentTired + A <= M) { currentWorkAmount += B; currentTired += A; } //다음 일을 하였을떄 피로도가 M보다 크다면 일을 멈추고 쉬어야한다. else { currentTired -= C; if(currentTired < 0 ) currentTired = 0; } } result = currentWorkAmount; } }
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 18511 큰 수 구성하기 - 완전탐색 + 문자열 JAVA (0) | 2023.07.09 |
---|---|
[백준] 15721 번데기 - 완전탐색 + 구현 JAVA (0) | 2023.07.09 |
[백준] 18312 시각 - 완전탐색 JAVA (0) | 2023.07.07 |
[백준] 19532 수학은 비대면강의입니다 - 완전탐색 JAVA (0) | 2023.07.07 |
[백준] 2231 분해합 - DFS + 완전탐색 JAVA (0) | 2023.07.07 |