class Solution {
public int solution(int num) {
int answer = 0;
int count = 0;
long res = (long) num; // num의 오버플로우로 long으로 형변환... 생각도 못함
while(res!=1){
if(count<500){
if(res%2==0){
res = res/2;
count ++ ;
}else{
res = res*3+1;
count ++ ;
}
}else{
count = -1;
break;
}
}
answer = count;
return answer;
}
}
class Solution {
public int solution(int num) {
int answer = 0;
int count = 0;
long res = (long) num; // num의 오버플로우로 long으로 형변환... 생각도 못함
answer= func(res, count);
return answer;
}
int func (long n, int count){
if(n==1)
return count;
if(count >=500)
return -1;
return n%2==0 ? func(n/2,++count) : func(n*3+1,++count);
}
}
2번째 방법에서 후위 연산자가 아닌 전위연산자 ++count로 하니까 재귀함수가 정상 작동이 됐다...
홀->짝->홀->짝 이 반복되는 경우에 num에서 int 오버플로우가 발생할 수 있다고 한다... 그래서 long으로 형변환을 해주고 시작했다.어차피 반환 돼야 하는 결과 값은 int의 count니까.