[プログラマー]完走できなかった選手


✔10.質問する


多くのマラソン選手がマラソンに参加した.1人の選手を除いて、すべての選手がマラソンを完走した.
マラソンに出場する選手の名前と完走した選手の名前の並びが完成したら、完走していない選手の名前を返す解決関数を書いてください.
せいげんじょうけん
  • マラソンに出場する選手は1人以上10万人以下.
  • 完了長さは参加者長1より小さい.
  • 参加者の名前は20文字を超えない.
  • の参加者には同名の人がいる可能性があります.
  • 😎 ソースコード

    #include <string>
    #include <vector>
    #include <unordered_map>
    
    using namespace std;
    
    string solution(vector<string> participant, vector<string> completion) {
      string answer = "";
      unordered_map<string, int> umap;
     
      for (auto i : completion) {
        umap[i]++;
      }
      
      /* 잘 저장이 되었나 확인해봤음
      for (auto it = umap.begin(); it != umap.end(); it++) {
        cout << it->first << " " << it->second << endl;
      }
      */
      
      for (auto k : participant) {
        umap[k]--;
        if (umap[k] < 0){
          answer = k;
        }
      }
      
      cout << answer << endl;
      
      return answer;
    }

    問題が終わったら


    本当に久しぶりにC++で問題を解きました.
    問題をレポートに並べ替えるとどうなりますか?という考えがあり、ハッシュに分類されているので、ハッシュで解くように努力しています.検索するとmap,無秩序mapがあることが分かったので,相違点も分かった.ソートする必要はないと思いますので、無秩序な地図で書くことができます.
    問題解決策は...
  • unordered_map<string, int> umap;無秩序地図資料構造を用いて宣伝する.完了配列の人名をキーとし、カウント数を値とします.
  • 参加者のループルックアップ値が0未満の人.完走していない人はカウントダウンがないからです.次のコードは注釈されています.完成した人を確認したいからです.
  •   cout << "=== completion ===" << endl;
      
      for (auto it = umap.begin(); it != umap.end(); it++) {
      	cout << it->first << ": " << it->second << endl;
       }
    このコードを実行すると、次の写真の完走者の名前と数字が表示されます.ここにいない人が正解という意味です

    ちょっと...おもしろい!
    海西は新鮮な資料構造のようです.