Programmers『完走していない選手』


Programmers『完走していない選手』

Level 1

質問する


多くのマラソン選手がマラソンに参加した.1人の選手を除いて、すべての選手がマラソンを完走した.
マラソンに出場する選手の名前と完走した選手の名前の並びが完成したら、完走していない選手の名前を返す解決関数を書いてください.

せいげんじょうけん

  • マラソンに出場する選手は1人以上10万人以下.
  • 完了長さは参加者長1より小さい.
  • 参加者の名前は20文字を超えない.
  • の参加者には同名の人がいる可能性があります.
  • I/O例


    participantcompletionreturn["leo", "kiki", "eden"]["eden", "kiki"]"leo"

    合成コード

    #include <string>
    #include <vector>
    #include <map>
    #include <algorithm>
    
    using namespace std;
    
    string solution(vector<string> participant, vector<string> completion) {
        map<int, string> M1;   // 비교를 위한 HashMap
        int k = -1;   // 완주를 하지 못한 선수가 마지막 주자일 경우 대비
        string answer;
        sort(participant.begin(), participant.end());
        sort(completion.begin(), completion.end());   // 두 객체 정렬 (비교를 쉽게 하기 위하여)
        for(int i=0; i<participant.size(); i++)
            M1.insert({i, participant[i]});   // HashMap에 요소 삽입
        for(int i=0; i<completion.size(); i++)  {
            if(M1.find(i)->second != completion[i]) {
                k = i;
                break;   // 비교 후 서로 다른 선수일 경우 해당 선수 완주 X
            }
        }
        if(k == -1) {
            answer = participant[participant.size()-1];   // 마지막 주자가 완주하지 못했을 경우
        } else {
            answer = participant[k];
        }
    
        return answer;
    }

    📌

  • の2つのオブジェクトを比較する場合は、ソート後に比較することが望ましい
    順序が同じであるため、漏れや追加された要素
  • が見やすい.
  • この問題は2つのベクトルを並べ替えて比較するので,HashMapを用いることなく2つのベクトルのインデックス値
  • を十分に比較できる.
  • HashMapを使用する場合、鍵の値の比較を使用することによって、答え
  • を見つけることができる.