反復[アルゴリズム]プログラマ-バイナリフォーマットコピー


https://programmers.co.kr/learn/courses/30/lessons/70129
問題の説明
0と1からなる任意の文字列xに対して、次のバイナリ形式のコピーを定義します.
  • xのすべての0を削除します.
  • xの長さがcの場合、xはバイナリで表される文字列に置き換えられます.
    例えば、x=「011010」の場合、xを2値変換するとx = "0111010" -> "1111" -> "100"になる.
    パラメータが0と1の文字列s.sが1になる前に、sをバイナリ変換し続ける場合は、バイナリ変換の回数と変換中に削除されたすべての0の個数を配列に入れて返す解関数を完了します.
  • せいげんじょうけん
  • sの長さは1以上150,000以下である.
  • sは、少なくとも1つの「1」を含む.
  • I/O例

    解答方法
    二つ考えなければならないことがあります.
    1.指定した文字列から0を削除し、残りの1を検索します.
    2.残りの1をバイナリに変換
    次に、sが「1」になるまで、以上の方法を繰り返します.
    次のコードが表示されます.

  • 外部のwhlie文はsが「1」になるまで繰り返される文である.
    外部whlieゲートを1回転するたびにrepeatが1回増加し,銃が何回振動変換されたかの値が得られる.

  • 外のwhileのドアの中から見ると、
    countOne変数には、sが持つ1つの数が含まれます.
    次に内部whlieゲートを迂回し,s列の後ろから値の確認を開始する.
    次に、チェックした値をpopを使用して配列から削除します.

  • 2進数を10進数に変換します.toString()法を用いた.
    2をtoStringの引数とすると、バイナリ値に変換された文字列が返されます.
  • function solution(s) {
        let countZero = 0;
        let repeat = 0;
        while(s.length !== 1){
            let countOne = 0;
            s = s.split("");
            while(s.length){
                s[s.length-1] === "1" ? countOne++ : countZero++;
                s.pop();
            }
            s = countOne.toString(2);
            repeat++;
        }
        return [repeat, countZero]
    }
    toString
  • の基数を指定し、10進数をその基数の値に変換し、返却したい場合に使用します.
  • が返す値のタイプはstringです.
    例えば、
  • const x = 15;
    x.toString(2); // > '1111'
    x.toString(8); // > '17'
    TOStringとは逆?結果を導く方法もあります.
  • 解析器Intは、渡された文字列パラメータを整数に解析して返します.
    -ParseIntの2番目の引数として基数を指定すると、1番目の引数に渡された文字列がその基数の数値として解析されて返されます.
    -常に10進数を返します.
  • // '10'을 2진수로 해석하고 그 결과를 10진수로 반환한다.
    parseInt('10', 2); // 2