テストエンコーディング|(JavaScript)プログラマー:約数の和


に質問


整数nを受け入れ、nのすべての約数加算値を返す関数は、解を完了してください.

制限

  • nは0または3000以下の整数です.
  • 🎹📢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 반복 조건식 ? 결괏값 : 함수명(입력값, 반복 조건 값의 변화, 결괏값의 변화)
    再帰関数は、繰り返す条件が満たされるまで関数を再実行します.

    参考資料とサイト(ありがとうございます)

  • https://programmers.co.kr/learn/courses/30/lessons/12928