[javascript-algorithm]プログラマー-コーラ推測


(1)問題リンク


https://programmers.co.kr/learn/courses/30/lessons/12943

(2)解答と解説1


-問題を解く

        let n = 6;

        function solution1(num) {
            let answer = 0;

            for(let i = 0; i < 500; i++) {
                if(num != 1) {
                    num = num % 2 == 0 ? num / 2 : num * 3 + 1;
                } else {
                    return answer = i;
                }
            }

            return answer = -1;
        }

        console.log(solution1(n)); // 8

-問題の説明

  • の複文により,設定条件の中で500回しか繰り返さない条件である.
  • 反復文では、条件文を用いて出力値を1と1に分け、出力値が1でない場合は演算後割当てを行い、1であれば現在回数を出力する.
  • 500回繰り返した後、戻り値がない場合は-1を指定します.
  • (2)問題解きと説明2


    -問題を解く

            function solution2(num) {
                let answer = 0;
    
                while(num !=1 && answer !=500){
                    num%2==0 ? num = num/2 : num = num*3 +1;
                    answer++;
                }
    
                return num == 1 ? answer : -1;
            }
    
            console.log(solution2(n)); // 8

    -問題の説明

  • 反復文では、論理演算子を使用して、1以外の場合、500回の反復という2つの条件を設定します.
  • の両方の条件がtrueの場合、変数の答えを演算して増減して保存回数を指定します.
  • 出力値が1または500回以上実行されている場合は、繰り返し文を終了し出力値を出力します.この場合、結果値を1に設定する3つの演算子が使用されます.1であれば計算回数の答えを出力し,1でなければ−1を出力する.
  • (2)問題解きと解説3


    -問題を解く

            function solution3(num,count = 0) {
                return num == 1 ? (count >= 500 ? -1 : count) : solution3(num % 2 == 0 ? num / 2 : num * 3 + 1,++count);
            }
    
            console.log(solution3(n));

    -問題の説明

  • の3つの演算子を使用してnumが1の場合と非1の場合に条件分割を行います.
  • trueの場合、count値を比較し、500回より大きい場合は-1を出力し、そうでない場合はcount値を出力します.
  • falseの場合、パラメータとして再帰関数を使用し、3つの演算子で演算し、カウンタを追加します.
  • (3)参考資料

  • ?(3項演算子)
  • さいきかんすう