#include <string>
#include <vector>
using namespace std;
int solution(int inum) {
long long num = (long long) inum;
int answer = 0;
while(num != 1){
if(num % 2 == 0){
num /= 2;
} else {
num = num * 3 + 1;
}
answer++;
if(answer == 500 && num != 1){
return -1;
}
}
printf("%d %d", num, answer);
return answer;
}
int의 오버플로우를 주의하자. 마지막 제한 사항을 확인하면 num은 8,000,000 미만의 정수이다.
int가 표현할 수 있는 수는 2,147,483,647 인데 계속 홀수가 나와서 x3 + 1을 계산하다보면 이 int가 표현할 수 있는 범위가 달라져서 num이 오버플로우가 발생한다. 그래서 제대로 계산할 수가 없다고 한다... 어이없어!
계속 3번 test case가 488이 떠서 어이없어 했는데 그러한 이유였다. c++는 항상 이런 변수형을 신경써줘야함 퉤
그럴거면 int를 왜 parameter로 준 것인가? 그래서 너무 단순하게 생각하고 속고 말았다.
디버깅 하는 방법을 잘 공부해야하는데 아무튼 "곱하기"가 나오면 이러한 오버플로우 문제도 생각해보기 꼭!