num != 1
이 동안 반복해준다num % 2 == 0
인 경우는 num / 2
, 아닌 경우는 num * 3 + 1
해주고 answer 카운트를 반복문을 한 번 돌 때마다 하나씩 올려준다.answer = -1
을 반환해주고, 아니라면 그대로 answer를 반환한다.class Solution {
public int solution(int num) {
int answer = 0;
long temp = num;
while (temp !=1) {
if (temp % 2 == 0) {
temp /= 2;
} else {
temp = temp * 3 + 1;
}
answer++;
if (answer >= 500) {
answer = -1;
break;
}
}
return answer;
}
}
처음에 long temp = num;
을 선언하지 않고 그대로 int num
을 사용했더니 3번 테스트 케이스에서 488(원래는 -1)이라는 테스트 값이 나오며 오류가 생겨서 맞는 코드를 몇번이나 수정했었다.
알고보니 answer가 100을 넘어가면서 오버 플로우가 발생해 결과값이 꼬이는 것을 알게되어 int형을 long형으로 다시 선언해주어 문제를 해결했다.
오버 플로우는 자료형의 범위를 벗어날 때 생기는 것으로 char는 -128 ~127을 범위로 가지는데, 반약 char n에 128이 담기면 오버플로우가 발생해 다시 최솟값 -128부터 시작하게 된다.