プログラムデザイナーlv 1回答:推測


プログラムデザイナーlv 1回答:推測

問題の説明


1937年にCollatzが提案したこの推測は,与えられた数が1になる前に次のタスクを繰り返し実行すれば,すべての数を1にすることができるということである.操作は次のとおりです.1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.例えば、入力された数字が6であれば、6→3→10→5→16→8→4→2→1の計8回が1となる.上記の操作を何回繰り返すかを示す関数を返します.解決策を完了します.ただし、タスクを500回繰り返しても1未満の場合は、-1を返します.

せいげんじょうけん

  • 入力の数字は、  numは、1または800万未満の整数である.
  • I/O例


    nresult68164626331-1

    I/O例説明


    I/O例#1問題の説明.
    I/O例#216->8->4->2->1の計4回は1です.
    I/O例#3626331は、500回の試行で1にならないため、−1を返さなければならない.

    説明する

    function solution(num) {
      // 결과 반복 횟수 저장 변수
      let result = 0;
      // 최대 500회만 반복해 주기 위한 변수
      let count = 0;
    
      // 최대 500번 실행
      while (count < 500) {
        // num이 1이라면 break
        if (num === 1) {
          break;
        }
    
        // num이 짝수라면 / 2
        // 홀수라면 * 3 + 1
        // 반복횟수 + 1
        if (num % 2 === 0) {
          num = num / 2;
        } else {
          num = num * 3 + 1;
        }
        result++;
        count++;
      }
    
      // 500회를 반복했음에도 1이 아니라면 -1 반환
      if (num !== 1) {
        return -1;
      }
    
      // 결과 반환
      return result;
    }