Programmers 42586 기능개발
in Algorithm
문제 링크 : 프로그래머스
나의 풀이
이 문제에서 각 기능이 배포될 수 있는 날짜 day는 progresses와 speeds로 구할 수 있다.
day = (100 - progresses)/speeds
위 수식은 정확히 100을 만들 수 있는 경우에만 적용된다. 만약 정확히 100을 만들 수 없다면 위 값에서 +1의 값을 더해줘야한다.
각 기능의 배포될 수 있는 날짜를 구했다면 날짜를 비교하며 각 배포마다 몇개의 기능이 배포되는지를 알 수 있다.
아무리 배포 날짜가 짧아도 앞에 기능이 배포되지 않으면 배포할 수 없기 때문에 앞에서부터 지정한 날짜의 값보다 작으면 함께 배포되는 것으로 생각할 수 있기 때문에 지정한 날짜보다 큰 값이 나오기 전까지 같이 배포되는 것으로 처리하였다.
풀이 코드 : 42586 기능개발
#include <string>
#include <vector>
using namespace std;
vector<int> solution(vector<int> progresses, vector<int> speeds) {
vector<int> answer;
int num;
int count = 1;
int max_day = (100-progresses[0])/speeds[0];
if((100-progresses[0])%speeds[0] != 0) max_day++;
int day;
for(int i = 1;i<progresses.size();i++){
day = (100-progresses[i])/speeds[i];
if((100-progresses[i])%speeds[i] != 0) day++;
if(max_day<day){
answer.push_back(count);
count = 1;
max_day = day;
}
else{
count++;
}
}
answer.push_back(count);
return answer;
}