[テストエンコーディング]JavaScript#1


質問する


多くのマラソン選手がマラソンに参加した.1人の選手を除いて、すべての選手がマラソンを完走した.
マラソンに出場する選手の名前と完走した選手の名前の並びが完成したら、完走していない選手の名前を返す解決関数を書いてください.
せいげんじょうけん
  • マラソンに出場する選手は1人以上10万人以下.
  • 完了長さは参加者長1より小さい.
  • 参加者の名前は20文字を超えない.
  • の参加者には同名の人がいる可能性があります.
  • I/O例
    participantcompletionreturn["leo", "kiki", "eden"]["eden", "kiki"]"leo"["marina", "josipa", "nikola", "vinko", "filipa"]["josipa", "filipa", "marina", "nikola"]"vinko"["mislav", "stanko", "mislav", "ana"]["stanko", "ana", "mislav"]"mislav"
    [ソース]プログラマー(https://programmers.co.kr/learn/courses/30/lessons/42576)

    答え。

    function solution(participant, completion) {
        for (let i=0; i <= participant.length - 1; i++) {  // 참가자배열중 1번~마지막까지 반복
          for (let j=0; j <= completion.length - 1; j++) {// 참가자 n과 완주자 배열에서 비교
            if(participant[i] === completion[j]) {
              participant[i] = 0
              completion[j] = 0
            // 동일할 경우 참가자배열과 완주자 배열 0으로 변경
            }
          }
        }
        for (let k=0; k <= participant.length - 1; k++) {
            if (participant[k] !== 0) {
                return participant[k]// 출력 참가자 배열중 0이아닌 값 출력반복
            }
        }
    }
    問題を解く前に配列に対する理解が低いため,単独で学習し,符号化テストを行うことができる.最初に問題を読むときは、二重の再複文を使って各配列を比較し、参加者配列の中で重ならない値を見つけて印刷すればよいので、上記の形式でコードを書くと、同名の異人がいる可能性があり、配列順はランダムなので、完了時に参加者と完全なランナーが同名によるエラーを防止するため,配列はいずれも0の再割り当てを決定する.
    テストコードの実行中に正しい値が出力されましたが、効率テストは不合格です.

    答え。

    function solution(participant, completion) {
        participant.sort() // 참가자 배열 순서 알파벨 순으로 정렬
        completion.sort()  // 완주자 배열 순서 알파벨 순으로 정렬
        for (let i=0; i<participant.length; i++)
            if(participant[i] !== completion[i]) { // 배열 순으로 비교하여 같지 않을 경우
              return participant[i] // 해당 참가자 배열 값 출력
            }
    }
    効率を高めるためには、条件文を減らすべきだと思いますので、まずコードを修正して比較と同時に値を出力します.そのためには2つの配列を同じ順序で並べるべきだと思います.sort()という名前の方法を見つけることができ、繰り返し文で比較する前に、2つの配列の順序を同じに並べ替えて比較し、異なる場合は直接出力することができます.上記の場合、同名の人がいても問題ありません.
    以上の答えは正確性と効率テストに合格できます.