Algorithm/CodingTest
[Baekjoon] 1173번 운동 (Java)
누구세연
2023. 11. 12. 20:57
https://www.acmicpc.net/problem/1173
1173번: 운동
첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.
www.acmicpc.net
운동이라는 문제를 Java로 풀이하겠습니다.
이 문제는 영식이가 운동을 하는데 걸리는 최소 시간을 계산하는 문제입니다.
각 분에 대해서 영식이가 운동을 선택하는 경우와 휴식을 선택하는 경우를 고려하여 최소 시간을 계산합니다.
문제에서 주어진 입력 값은 아래와 같습니다.
- N : 운동하려는 총 시간
- m : 초기 맥박
- M : 최대 맥박
- T : 운동으로 증가하는 맥박
- R : 휴식으로 감소하는 맥박
초기에 영식의 맥박은 m이며, 매 분마다 운동을 선택하면 T만큼 맥박이 증가하고, 휴식을 선택하면 R만큼 맥박이 감소합니다.
단, 맥박은 m 이상이어야 하며 최대 맥박 M을 넘어가면 안 됩니다.
저는 다음과 같이 풀이하였습니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt(); // 운동을 하는 총 시간
int m = scanner.nextInt(); // 초기 맥박
int M = scanner.nextInt(); // 최대 맥박
int T = scanner.nextInt(); // 운동으로 증가하는 맥박
int R = scanner.nextInt(); // 휴식으로 감소하는 맥박
int time = 0; // 운동에 필요한 총 시간
int currentHeartRate = m; // 현재 맥박 초기화
while (N > 0) {
// 운동을 할 수 있는 경우
if (currentHeartRate + T <= M) {
currentHeartRate += T; // 맥박 증가
N--; // 운동 시간 감소
time++; // 총 시간 증가
} else {
// 휴식으로 맥박 감소
currentHeartRate = Math.max(currentHeartRate - R, m);
time++; // 총 시간 증가
// 운동을 할 수 없는 경우
if (currentHeartRate == m && currentHeartRate + T > M) {
time = -1;
break;
}
}
}
System.out.println(time);
}
}
제 풀이에서는 각 분에 대해서 다음과 같은 로직을 반복하였습니다.
- 현재 맥박에 운동을 선택하는 경우 맥박이 T만큼 증가하고, 운동 시간 N과 총시간을 나타내는 변수 time 감소합니다.
- 만약 운동으로 증가한 맥박이 최대 맥박 M을 넘어가면, 휴식으로 맥박을 R만큼 감소시킵니다.
단, 맥박은 초기 맥박 m 보다 낮아지면 안 되므로 Math.max 함수를 사용합니다. - 운동을 할 수 없는 경우(N분 동안 운동을 할 수 없는 경우)에는 time을 -1로 설정하고 반복문을 종료합니다.
이러한 과정을 통해 최종적으로 time에는 운동을 하는데 필요한 최소 시간이 저장됩니다.
이견이 있으시다면 자유롭게 댓글 남겨주세요.
