알고리즘

[백준, 자바, 1173번] 운동

hminor 2023. 12. 13. 11:35

풀이

 

  • 조건식을 통해 최대 혈압 - 최소 혈압의 차이가 T를 넘을 경우 -1 출력하도록 하기
  • 넘지 않고 최소 혈압에 운동 후의 추가 혈압이 최대를 넘지 않을 경우와
  • 넘을 경우에 대한 조건 분기를 하며 
  • 넘을 경우에는 다시 운동할 수 있는 혈압이 될때까지 while문을 반복한 다음
  • 운동한 뒤 카운팅하여 문제 해결

 

package _2312;

import java.io.*;
import java.util.*;


public class 운동 {
    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 be_m = m;
        int cnt = 0;

        if (M-m >= T) {
            for (int i = 0; i < N; i++) {
                if (m+T <= M) {
                    m += T;
                    cnt ++;
                }
                else {
                    while (m+T > M) {
                        cnt ++;
                        if (m-R >= be_m) m -= R;
                        else {
                            m = be_m;
                            break;
                        }
                    }
                    m += T;
                    cnt ++;
                }
            }
            System.out.println(cnt);
        } else {
            System.out.println(-1);
        }
    }
}