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 타입으로 변경하여 해결하였다.

 

https://github.com/leejy811/AlgorithmStudy/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/1/12943.%E2%80%85%EC%BD%9C%EB%9D%BC%EC%B8%A0%E2%80%85%EC%B6%94%EC%B8%A1