[アルゴリズム]プログラマ機能の開発



1.問題分析

  • 100セントとの差を速度で割って、後の速度を乗じて100%を超えるかどうかを判断すれば、簡単に通過できます.
  • 2.回答プロセス(挿入)

  • スタックまたはキューを使用する必要はありません.
  • 3.トラブルシューティング

  • の前から順に問題解析を行う過程でよい.
  • 100%を超えると値を増やし、超えなければ答えに押し、その位置から再開します.
  • 4.コード

    #include <string>
    #include <vector>
    
    using namespace std;
    
    vector<int> solution(vector<int> progresses, vector<int> speeds) {
        bool iscutted = false;
        int remain = 0;
        int multiple = 0;
        int end_progresses = 0;
    
        vector<int> answer;
        
        for(int i = 0; i < progresses.size();)
        {
            end_progresses = 1;
            iscutted = false;
            remain = 100 - progresses[i];
            multiple = (remain % speeds[i] == 0) ? remain / speeds[i] : remain / speeds[i] + 1;
            for(int j = i+1; j < progresses.size(); j++)
            {
                progresses[j] += speeds[j] * multiple;
                if(!iscutted)
                {
                    if(progresses[j] >= 100)
                        end_progresses++;
                    else
                    {
                        i = j;
                        answer.push_back(end_progresses);
                        iscutted = true;
                    }
                }
            }
            if(!iscutted)
            {
                i = 101;
                answer.push_back(end_progresses);
            }
        }
        return answer;
    }

    5.学習の達人のコード

  • 私は一つ一つ値の大きさを計算して判断しますが、達人は残りの日数だけを計算して問題を解決します.
  • 残りの日数は100%を99で割るのではなく、99を1で割ると無条件+1で処理できます.
  • 私も最初は答えに1を加えたいと思っていましたが、そのまま++vector.back()とは知らなかったので出来ませんでした.
  • #include <string>
    #include <vector>
    #include <iostream>
    using namespace std;
    
    vector<int> solution(vector<int> progresses, vector<int> speeds) {
        vector<int> answer;
    
        int day;
        int max_day = 0;
        for (int i = 0; i < progresses.size(); ++i)
        {
            day = (99 - progresses[i]) / speeds[i] + 1;
    
            if (answer.empty() || max_day < day)
                answer.push_back(1);
            else
                ++answer.back();
    
            if (max_day < day)
                max_day = day;
        }
    
        return answer;
    }