C++ 문제 풀이/프로그래머스
[프로그래머스/C++] 콜라츠 추측
leejy811
2024. 1. 14. 17:19
1. 문제 설명

2. Solution
#include <string>
#include <vector>
using namespace std;
int solution(int num) {
int answer = 0;
long long ln = num;
while(ln != 1) {
if(answer == 500){
answer = -1;
break;
}
ln % 2 == 0 ? ln /= 2 : ln = ln * 3 + 1;
answer++;
}
return answer;
}
이 문제는 겉으로 보면 굉장히 쉬운문제이다. 하지만 치명적인 함정이 숨어있었다. 처음에 이 문제를 풀었을 때 코드 실행은 되지만 채점에서 몇가지 케이스에서 실패가 나왔다. 그 이유는 홀수의 경우 3을 곱하고 1을 더한다. 제한사항에서 num은 8,000,000미만인 정수라고 하였다. 따라서 숫자가 매우 크기 때문에 다음과 같은 연산을 반복하다 보면 int의 범위를 넘어가는 일이 발생한다. 이 경우의 수를 간과하고 있었고 num을 long long 타입으로 변경하여 해결하였다.