n일동안 사용할 돈을 m번 출금하여 사용할때 인출하여 사용할 금액을 구한다
사용하게 될 금액은 전부 사용하는 최대의 금액이거나
딱 한번 사용 할 가장 최소의 금액이다. 왜 사용하지 않는 경우가 아니라 딱 한번 사용할 금액이냐 하면 문제에서 주어져있는 m의 값이 1이상인 값이기 때문이다. 그리고 가장 적게 나올금액도 1이상이기 때문에 가장 적게 사용할 금액이 1인것이다.
int min = 1; // 가장 적게 인출 될 금액
int max = 0; // 가장 많이 인출 될 금액
for (int i = 0;i < n; i++) {
money[i] = Integer.parseInt(br.readLine());
max += money[i];
}
그리고 나서 용돈을 사용할때는 인출 금액보다 사용하게 될 금액이 크면 안된다, 그리고 사용하고 남은 금액보다 사용할 금액이 더 크면 인출 해야 한다. 이때 모든 금액을 다시 넣고 인출 해야 하기 때문에 초기화 하는 작업이 필수로 필요한것이다.
private static boolean isValid(int k) {
int spend = k;
// 인출을 해야 사용가능 하기 때문에 필수적으로 1부터 시작해주어야 한다
int count = 1;
for (int i= 0; i < n; i++) {
// 사용해야 할 금액이 인출 금액보다 크면 안된다
if (k < money[i]) {
return false;
}
// 남은 금액보다 인출 금액이 크다면 모든 금액을 다시 넣고 인출해야 한다
if (spend < money[i]) {
spend = k;
count++;
}
spend -= money[i];
}
return m >= count;
}