N

(프로그래머스 c++)콜라츠 추측 본문

프로그래머스 알고리즘/1단계

(프로그래머스 c++)콜라츠 추측

naeunchan 2020. 4. 28. 23:30
728x90
반응형

입력으로 들어온 num을 1이 될 때까지 반복하여 문제를 푸는 문제이다..!

그런데 long long tmp = num을 한 이유는..?

 

바로 오버플로우 때문이다.

int num을 이용하여 while문을 돌게 되면 3번째 예시로 들어온 626331의 답이 488로 나오게 된다.

이는 오버플로우로 인해 값이 손실되었기 때문이다..!

그래서 long long 형 변수를 선언하여 문제를 풀어야 한다..!

#include <string>
#include <vector>

using namespace std;

int solution(int num) {
    int answer = 0;
    long long tmp = num;
    
    while(tmp != 1)
    {
        if(answer > 500)
            return -1;
        if(tmp % 2 == 0)
            tmp /= 2;
        else
            tmp = tmp * 3 + 1;
        answer++;
    }    
    return answer;
}
728x90
반응형