繰り返しバイナリ形式のコピー[Javascript]


問題の説明


0と1からなる任意の文字列xに対して、次のバイナリ形式のコピーを定義します.
x上のすべての0を削除します.
xの長さがcの場合、xを「バイナリ文字列」に置き換えます.
例えば、x=「011010」の場合、xをバイナリ変換すると、x=「011010」->「1111」->「100」となる.
パラメータが0と1の文字列s.sが「1」になるまでsをバイナリ変換し続け、バイナリ変換の回数と変換中に削除されたすべての0の個数を配列に入れて返します.

せいげんじょうけん


sの長さは1または15万以下である.
sは少なくとも1つの「1」を含む.

I/O例


sresult"110010101001"[3,8]"01110"[3,3]"1111111"[4,1]

解法


文字列が1になるまでバイナリ変換を繰り返します.
これは他のアルゴリズムがなければ簡単に解決できる問題です.
const convertBinaryNumber = (number) => {
    const quotArr = [];
    while(number > 0) {
        quotArr.unshift(number % 2);
        number = Math.floor(number / 2);
    }
    return quotArr.join("");
}
const solution = (s) => {
    let convertCnt = 0, deleteCnt = 0;
    let cnt = 3;
    while(s !== "1") {
        let beforeLength = s.length;
        s = s.replace(/0/g, "");
        deleteCnt += beforeLength - s.length;
        s = convertBinaryNumber(s.length);
        convertCnt++;
    }
    return [convertCnt, deleteCnt];
}