[C++][프로그래머스 42586] 기능개발

PublicMinsu·2022년 11월 25일
0

문제

접근 방법

배포가 가능해지는 일을 차례대로 구하며 앞에서 구한 날짜보다 작을 시 같이 배포하는 방식으로 접근하면 된다고 생각했다.

배포는 하루에 한 번만 할 수 있으며, 하루의 끝에 이루어진다고 가정합니다. 예를 들어 진도율이 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

같이 배포를 할 수 없는 날짜면 기록해주고 배포를 할 수 있는 날짜를 갱신해준다.

profile
연락 : publicminsu@naver.com

0개의 댓글