suheang

[백준] | JAVA, 자바 | 1173번 - 운동 본문

알고리즘

[백준] | JAVA, 자바 | 1173번 - 운동

suheang 2024. 4. 21. 21:17

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

 

1173번: 운동

첫째 줄에 다섯 정수 N, m, M, T, R이 주어진다.

www.acmicpc.net


문제 요약 :

운동을 선택한 경우, 영식이의 맥박이 T만큼 증가한다. 즉, 영식이의 맥박이 X였다면, 1분 동안 운동을 한 후 맥박이 X+T가 되는 것이다. 영식이는 맥박이 M을 넘는 것을 원하지 않기 때문에, X+T가 M보다 작거나 같을 때만 운동을 할 수 있다. 휴식을 선택하는 경우 맥박이 R만큼 감소한다. 즉, 영식이의 맥박이 X였다면, 1분 동안 휴식을 한 후 맥박은 X-R이 된다. 맥박은 절대로 m보다 낮아지면 안된다. 따라서, X-R이 m보다 작으면 맥박은 m이 된다.

영식이의 초기 맥박은 m이다. 운동을 N분 하려고 한다. 이때 운동을 N분하는데 필요한 시간의 최솟값을 구해보자. 운동하는 시간은 연속되지 않아도 된다.

 

( 첫째 줄에 운동을 N분하는데 필요한 시간의 최솟값을 출력한다.. 만약 운동을 N분 할 수 없다면 -1을 출력 )


문제 풀이 :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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 N = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
        int T = Integer.parseInt(st.nextToken());
        int R = Integer.parseInt(st.nextToken());

        int pulse = m;
        int exercise = 0;
        int total = 0;

        if (m + T > M) {
            System.out.println(-1);
            return;
        }

        while (exercise < N) {
            if (pulse + T <= M) {
                pulse += T;
                exercise++;
            } else {
                pulse -=R;
                if (pulse < m) {
                    pulse = m;
                }
            }
            total++;
        }
        System.out.println(total);
    }
}

 

1. 다섯 정수 N, m, M, T, R 입력받기

2. 변수 pulse, exercise, total 생성, pulse에는 m 값을 저장

3. 만약 m + T가 M 보다 크다면 -1 출력

4. exercise가 N보다 작을 때 while문 실행

5. pulse + T 가 M보다 작거나 같을 때 pulse += T, exercise ++

6. pulse + T가 M보다 크다면 pulse -= R, 만약 pulse가 m 보다 작다면 pulse = m

7. total++, exercise가 N보다 작다면 while문 반복, N보다 크거나 같다면 while문 종료

8. 저장된 total 출력