テストエンコーディング|(JavaScript)プログラマー:約数の和
に質問
整数nを受け入れ、nのすべての約数加算値を返す関数は、解を完了してください.
制限
🎹📢I/O例
ほどく
function solution(n) {
let answer = 0;
for(let i = 0; i <= n; ++i){
if(n % i === 0){
answer += i;
}
}
return answer;
}
約数とは単純な問題であり,除算後の値,すなわち除算後の余数が0の値を見つければよい.考える必要もない時間!!何を直接提出したのかな~しかしあまりにも非効率的なようなので、何か性能を上げる方法があるのかと思い、次のような方法に変更しました.もちろん!3000以下の数字には大きな違いはありません.
function solution(n) {
let answer = 0;
let half = n / 2;
for(let i = 0; i <= half; ++i){
if(n % i === 0){
answer += i;
}
}
answer += n;
return answer;
}
小数点以下の数字に分けて、値の半分の後に、自分の値だけが存在するので、1つの値の半分を繰り返して、自分で入力した値を加えるだけです.入力した値を487742111111に設定してテストを行い、結果が出る時間も大幅に短縮されます.
🎈他人の解答
function solution(n, a=0, b=0) {
return n<=a/2?b:solution(n,a+1,b+=n%a?0:a);
}
やっぱり今回も…再帰関数で開いた箱が最も多かった.3つの演算子で解く方法のルールを見始めます.
return 반복 조건식 ? 결괏값 : 함수명(입력값, 반복 조건 값의 변화, 결괏값의 변화)
再帰関数は、繰り返す条件が満たされるまで関数を再実行します.
参考資料とサイト(ありがとうございます)
Reference
この問題について(テストエンコーディング|(JavaScript)プログラマー:約数の和), 我々は、より多くの情報をここで見つけました https://velog.io/@goblin820/코딩테스트-JavaScript-프로그래머스-약수의-합テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol