プログラマ質問の回答-最大数(C++)


プログラマの質問-最大数(C++)


問題の説明



  • ...各数値を並べ替えることで最大数を返す問題です.

  • これは簡単なソートの問題です.
  • しょきかいほう


  • C++のアルゴリズムライブラリでnext permutationを使用してソートし、その最大数を検索する方法を選択します.

  • タイムアウトは発生しませんがcore duffingエラーが発生しました.

  • Pythonのitertoolsのように使わずに先に実現...
  • かいしゃく法を改正する

    #include <string>
    #include <vector>
    using namespace std;
    bool sort_def(string a,string b){
        return a+b>b+a;
    }
    
    string solution(vector<int> numbers) {
        string answer = "";
        int max = 0;
        vector<string> sv;
        for(auto idx:numbers){
            sv.push_back(to_string(idx));
        }
        
        sort(sv.begin(),sv.end(),sort_def);
        
        if(sv.at(0)=="0")return "0";
        for(auto c:sv){
            answer+=c;
        }
        
        return answer;
    }
  • はむしろPythonよりも簡単な実現方式である.私はまだ関数の使い方に慣れていないので、探しながら作りましたが…
  • は、まずto stringを用いてintフォーマットのベクトルをstringフォーマットのベクトルとして再定義する.
  • で再定義されたベクトルをsorf defというカスタム関数でソートします.
  • sort defの役割
    -ex)「3」と「30」がある場合、数字で比較すると30はもっと大きい数字ですが、私たちは組み合わせて大きな数字を形成するので「330」>「303」なので、2つのstringを加えて大きな値で並べ替えます.
  • でソートされたベクトルでは、先頭の文字が0の場合、後の文字も0になります.したがって、先頭の文字が0の場合、0が返されます.
    そうでない場合は、結果値を答え文字列に出力します.