Programmers 42586 기능개발

로고 이미지

문제 링크 : 프로그래머스

나의 풀이

이 문제에서 각 기능이 배포될 수 있는 날짜 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;
}

채점결과

42586


© 2020. All rights reserved.

Powered by Hydejack v8.4.0