1. 문제설명
하루 한 시간 일하면 피로도가 A만큼 쌓이고 일은 B만큼 할 수 있다.
만약 한 시간을 쉰다면 피로도는 C만큼 줄어든다. 피로도가 음수가 되면 0으로 바뀐다.
피로도를 M이 넘지 않고 하루에 최대 일할 수 있는 시간을 구하는 문제이다.
(하루는 24시간, 맨 처음 피로도는 0)
- 시간 제한: 1초
- 메모리 제한: 1024MB
2. 접근 방식
=> 완전탐색 방법으로 1부터 24(하루)까지 일한 경우와 하지 않은 경우의 피로도를 계산한다.
- for문으로 1부터 24까지(하루)
- 한 시간 일했을 때의 피로도를 계산하여 (next)
- next가 최대 피로도 M보다 작거나 같으면 결과값에 B를 더하고, 피로도를 A만큼 증가시킨다.
- next가 최대 피로도 M보다 크면 피로도를 C만큼 감소시킨다.
- 만약 C만큼 감소시킨 피로도가 음수가 되면 0으로 재설정한다.
3. 최종 코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
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 tired = 0; // 피로도
int work = 0; // 일하는 시간 (결과값)
for(int i=1; i<=24; i++) { // 24시간
int next = tired + A; // 한 시간 일했을 때 피로도
if(next <= M) { // next가 최대 피로도보다 낮으면
work += B; // 일하는 시간 1시간 증가시킴
tired += A; // 피로도 A만큼 축적
continue;
} else if(next > M) { // next가 최대 피로도보다 크면
tired -= C; // 피로도 C만큼 감소
if(tired < 0) tired = 0; // 만약 피로도가 음수가 되면 0으로 설정
continue;
}
}
System.out.println(work);
}
}
반응형
'알고리즘 문제 > 백준' 카테고리의 다른 글
[백준] 5568번: 카드 놓기 (Java) (0) | 2024.08.09 |
---|---|
[백준] 17626번: Four Squares (Java) (0) | 2024.08.09 |
[백준] 18511번: 큰 수 구성하기 (Java) (0) | 2024.08.08 |
[백준] 19532번: 수학은 비대면강의입니다 (Java) (4) | 2024.08.07 |
[백준] 18312번: 시각 (Java) (0) | 2024.08.07 |
댓글