[C++] 프로그래머스 Level 1 : 콜라츠 추측

Kim Nahyeong·2022년 8월 14일
0

프로그래머스

목록 보기
17/38

#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로 준 것인가? 그래서 너무 단순하게 생각하고 속고 말았다.

디버깅 하는 방법을 잘 공부해야하는데 아무튼 "곱하기"가 나오면 이러한 오버플로우 문제도 생각해보기 꼭!

0개의 댓글