문제
접근 방법
A는 N의 약수이므로, 물을 줄 때 N/A의 몫 만큼씩 물을 계속해서 줄 때, 살아 있는 기간이 최대.
배열의 크기를 N/A로 설정한 후 1, 2, 3의 과정을 반복하며 특정 index의 값이 0보다 작은 경우 반복을 종료
(예외 처리) 만약 음수인 경우, 해당 날짜만큼 더 진행된 것이므로 날짜 + arr[idx] 값을 더해줌
코드
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N, K, A, B;
// N 개의 화분, K 만큼의 수분, 연속된 A 개의 화분, B 의 수분 추가
cin >> N >> K >> A >> B;
int size = N/A;
vector<int> arr(size, K);
int count = 0;
int i = 0;
while (arr[i] > 0) {
arr[i] += B;
for (int j =0; j < size; j++) arr[j]--;
i = (i + 1) % size;
count++;
}
if (arr[i] < 0) count += arr[i];
cout << count;
return 0;
}
링크