https://programmers.co.kr/learn/courses/30/lessons/12943
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);
}
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;
}