ATM

2023.09.22 (FRI)


문제 : 백준 - 27952. 보디빌딩


조건 및 설명

  • 루틴을 진행할 떄마다, 몸무게가 Xkg 만큼 빠진다.
    • 이 루틴을 하루에 여러번 가능
  • 보디빌딩이 남은 N일 동안, 식단으로 i번째 날에 Bikg만큼 찐다.
  • 최소 몸무게가 Aikg 이상이어야 한다.

접근법

결과 코드

/*
 * Title : 보디빌딩
 * Link : https://www.acmicpc.net/problem/27952
 */
import java.io.*;
import java.util.*;

public class Main {
    private static int N; // 보디빌딩 대회까지 남은 일수
    private static int X; // 루틴을 진행할 떄마다 빠지는 몸무게
    private static int[] A; // i번째 날 최종 몸무게의 하한
    private static int[] B; // i번째 날에 늘어나는 몸무게

    public static void main(String[] args) throws Exception {
        int answer = 0;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        int current_weight = 0;

        // input
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        X = Integer.parseInt(st.nextToken());

        A = new int[N];
        B = new int[N];
        
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i ++) 
            A[i] = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i ++) 
            B[i] = Integer.parseInt(st.nextToken());
        
        // calculation
        for (int i = 0; i < N; i++) {
            current_weight += B[i];
            int routine = (current_weight - A[i]) / X;

            // if, he falls down
            if (current_weight < A[i]) {
                answer = -1;
                break;
            }

            // if, he can do routine
            if (routine > 0) {
                current_weight -= X * routine;
                answer += routine;
            }
        }
        
        System.out.println(answer);
    }
}