繰り返しバイナリ形式のコピー[Javascript]
1125 ワード
問題の説明
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];
}
Reference
この問題について(繰り返しバイナリ形式のコピー[Javascript]), 我々は、より多くの情報をここで見つけました https://velog.io/@sjuhee97/프로그래머스-이진-변환-반복하기-Javascriptテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol