テストエンコーディング|(JavaScript)プログラマー:同じ数字が好きではありません


に質問


配列arr.アレイarrの各要素は、0から9の数字で構成されています.この場合、アレイarrは連続して表示される数字を1つだけ保持し、すべて削除しようとします.ただし、削除後に残数を返す場合は、アレイarr内の要素の順序を維持する必要があります.たとえば、
  • arr=[1,1,3,0,1]は[1,3,0,1]を返します.
  • arr=[4,4,4,3]は[4,3]を返します.
  • 配列arrから連続して現れる数字を削除し、残りの数を返すsolution関数を完了してください.

    制限

  • アレイarrサイズ:1000000以下の自然数
  • アレイarrの要素サイズ:0以上9以下の整数
  • 🎹📢I/O例



    ほどく

    function solution(arr)
    {
        let answer = [];
        let beforeNum = -1;
        for(let i = 0; i < arr.length; ++i){
            if(beforeNum == arr[i]){
               continue;
            } else {
                answer.push(arr[i]);
                beforeNum = arr[i];
            }
        }
        return answer;
    }
    
    // 다른 방법
    const solution = (arr) => arr.filter((value,index) => value != arr[index+1]);
    一つ目の方法は思いついたことをどのような方法で解いたのか、解いた後に前に解いた問題で使っていたフィルターでも解いた.しかし、速度は最初の方法がもっと速いです.

    🎈他人の解答

    let solution=_=>_.filter((i,$)=>i!=_[--$])
    これは何ですか...?私が解いた2つ目の方法と同じように、説明しましょう~!
    まず、언더라인(_)はパラメータとして入力される配列、iは配列の要素、$はインデックスのようです.こんな文法になったとは知らなかったおかしいな上海~Codeに変えて~let solution =(arr)=>(arr).filter((val,i) => val != arr[--i]);終了!
    ここで少し混同される部分は、arr[--i]において、i-1で用いられるように、電位演算子によってiを減算することである.

    参考資料とサイト(ありがとうございます)

  • https://programmers.co.kr/learn/courses/30/lessons/12906