プログラマLv 2-機能開発


コード#コード#

#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <iostream>

using namespace std;

vector<int> solution(vector<int> progresses, vector<int> speeds) {
    vector<int> answer;
    int day = 0, cal = -1, now = 0;
    for(int i=0;i<progresses.size();i++) {
        // 날짜 계산
        cal = ceil((double)(100 - progresses[i]) / speeds[i]);
        if(cal <= day) {
            // 이미 처리된 작업 증가
            now++;
        } else {
            if(day != 0) {
                // 다음 작업을 위해 그전 작업 개수 증가
                answer.push_back(now);
            }
            // 날짜 업데이트
            day = cal;
            now = 1;
        }
    }
    answer.push_back(now);
    return answer;
}

解答と感想


これは単純に実施によって解決される問題である.まず、ワークロードベースで計算された日付が保存されます.また,その日付を基準とすれば同時配信が可能であるため,数を増やした.日付が初期値でない場合は、新しく処理され、answerに保存されます.最後の作業は別途保存する必要があり、forのドアの外でもう一度保存します.最良の解答から見ると、私は++answer.back()を使っています.もし私も使えば、もっときれいに書くはずです.