[白俊]JavaScript 4673セルフサービス番号
Question
[白俊]JavaScript 4673セルフサービス番号
input
なし.
output
10000以下の自己符号を行ごとに1つ追加する順序で出力します.
example
1
3
5
7
9
20
31
42
53
64
|
| <-- a lot more numbers
|
9903
9914
9925
9927
9938
9949
9960
9971
9982
9993
Solution 1
除算と余剰演算により各ビット数を求める.
falseが10000の配列を作成し、for文の周りに数字と各ビット数の和(d(n))が等しい2番目の配列要素(arr[d(i)−1])をtrueに設定します.このプロセスで配列が作成され、その配列が自己符号化されているかどうかで構成されている場合、falseの値を持つ要素(自己符号化)のみが出力されます.
function d(n){
let sum=n;
let temp=sum;
while(temp>0){
sum+=temp%10;
temp=parseInt(temp/10);
}
return sum;
}
const N=10000;
const arr=new Array(N).fill(false);
for(let i=1;i<=N;i++){
arr[d(i)-1]=true;
}
for(let i=0;i<N;i++){
!arr[i]&&console.log(i+1);
}
Solution 2
文字列split(")メソッドで各ビット数を作成し、reduceで合計します.
空の配列を作成し、結果値を入れてjoin(
'\n'
)で一度に出力します.let temp = [];
let result = [];
for(let i = 1; i <= 10000; i++) {
temp.push(i + i.toString().split('').reduce((prev, curr)=> prev + parseInt(curr), 0));
}
for(let i = 1; i <= 10000; i++) {
if(temp.indexOf(i) === -1){
result.push(i);
}
}
console.log(result.join('\n'));
What I learned
1.桁数が指定されておらず、各桁数を加算したい場合
合計(sum)と一時値(temp)を含む変数を作成し、while lotempの作業位置を求め、sumに追加し、parseInet(temp/10)の作業位置にtempを減算します.(ex.4321=>432)tempが動作する位置になるまでこのように繰り返す.(ex. temp: 4321=>432=>43=>4)
2.n個のパディング配列を作成する方法
new Array(N).fill(어떤 값)
new Array(N)
:未定義の佳N個人案の生成arr.fill(value[, start[, end]])
:アレイの特定領域を特定値で埋めるArray.from({length:N},()=>어떤 값)
3. arr.indexOf(searchElement[, fromIndex])
indexOf()メソッドは、配列内に指定された要素を見つけることができる最初のインデックスを返し、存在しない場合は-1を返します.
Reference
https://dpsc615.tistory.com/40
https://www.acmicpc.net/source/2856026
Reference
この問題について([白俊]JavaScript 4673セルフサービス番号), 我々は、より多くの情報をここで見つけました https://velog.io/@wiostz98kr/백준-JavaScript-4673번-셀프-넘버テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol