배포가 가능해지는 일을 차례대로 구하며 앞에서 구한 날짜보다 작을 시 같이 배포하는 방식으로 접근하면 된다고 생각했다.
배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 95%인 작업의 개발 속도가 하루에 4%라면 배포는 2일 뒤에 이루어집니다.
이 부분을 고려하면 무조건 올림 시켜주는 것이 맞다고 생각했다.
#include <string>
#include <vector>
#include <cmath>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds)
{
vector<int> answer;
int curDay = ceil((100 - progresses[0]) / (double)speeds[0]), count = 1;
for (int i = 1; i < progresses.size(); ++i)
{
int day = ceil((100 - progresses[i]) / (double)speeds[i]);
if (day <= curDay)
{
count++;
}
else
{
answer.push_back(count);
curDay = day;
count = 1;
}
}
answer.push_back(count);
return answer;
}
ceil((100 - progresses[i]) / (double)speeds[i])
배포를 할 수 있는 날짜를 구하는 방법이다.
if (day <= curDay)
새로 구한 배포를 할 수 있는 날짜가 이미 기록된 날짜보다 작을 시 같이 배포해주기 위해 count를 더해준다.
else
같이 배포를 할 수 없는 날짜면 기록해주고 배포를 할 수 있는 날짜를 갱신해준다.