프로그래머스 #JS - 콜라츠 추측

SSO·2020년 1월 13일
0

프로그래머스Lv1

목록 보기
29/47

문제

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

풀이

  1. 2020
function solution(num) {
    var answer = 0;
    
    for(var i=0; i<500; i++){
      if(num === 1){
        answer = i;
        break;
      }else if((i===499)&&(num!==1)){
        answer = -1;
      }else if(num%2 === 0){
          num = num/2;
      }else if(num%2 !== 0) {
            num = num*3 +1;
      }
    }
  
    return answer;
}

더 생각해보기

   1. 경우의 수에 따라 if, else 조건만 제대로 세우면 간단히 해결 가능한데, 처음에 if만 나열해서 num이 1이 된 후에도 무한루프 => -1을 리턴하게 함...
  2. 재귀함수로 풀어보기

function collatz(num,count = 0) {
    return num == 1 ? (count >= 500 ? -1 : count) : collatz(num % 2 == 0 ? num / 2 : num * 3 + 1,++count);
}
  1. 2019
function solution(num) {
    var answer = 0;
    var result = num;
    if (result === 1){
        answer === 1;
    } else {
        for (var i=1; i<500; i++){
            if (( result % 2 ) === 0){//even number
                result = ( result / 2 );
                if (result === 1 ){
                    answer = i;
                    break;
                }
            } else { // odd number
                result = (result * 3) + 1;
                 if (result === 1){
                    answer = i;
                    break;
                }   
            }  
        }   
        if (result !== 1) {
             answer = -1;
        }
           
    }
    return answer;
}

참고사항

profile
happy

0개의 댓글