[#42576]ハッシュ走りきれなかった選手-JavaScript


問題の説明


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

せいげんじょうけん

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



    I/O例説明


    例1
    「leo」は参加者名簿に載っているが、フルコースを走る者名簿には載っていないため、フルコースを完走できなかった.
    例2
    「vinko」は参加者名簿に載っていたが、完走者名簿に載っていなかったため完走できなかった.
    例#3
    「誤導」は参加者リストに2人いたが、完走者リストには1人しかいなかったため、1人は完走しなかった.

    に答える


    まずparticipant配列を{key:value}としてcountする.
    参加者=[「誤導」、「stanko」、「誤導」、「ana」一時
    { mislav: 2, stanko: 1, ana: 1 }completion配列では、オブジェクト化されたobjListに対応するキー値が存在するか、またはその値が0でない場合、countが減少する.objListの全てのキー値のうち、0でない値のみが、完走していない選手名を返している.
    function solution(participant, completion) {     
        // key, value로 객체화
        let objList = participant.reduce( (acc, name) => {
            acc[name] = acc[name] ? acc[name]+=1 : 1;
            return acc;
        }, {});
            
        completion.map( (name) => {  
            if(objList[name]) objList[name]-=1;  
        })
        
        return Object.keys(objList).filter( name => objList[name] !== 0 )[0]
    }
    初期放出の時間的複雑さを考慮しないため、効率は0%である.

    📌 誤った解釈

    function solution(participant, completion) {
        let answer = '';
        
        participant.map( name => {
            
            const firstIndex = completion.indexOf(name);
            
            if (firstIndex == -1) return answer += name;
            
            completion.splice(firstIndex, 1);
        });
        
        
        return answer;
    }