본문 바로가기

코딩 테스트 연습/알고리즘

[ 코딩 테스트 ] 콜라츠 추측

문제

조건

 

정답

int solution(long num) {
    int answer = 0;
    
    if (num == 1) {
        return answer;
    }
    while (true) {
        if (num % 2 == 0) {
            num /= 2;
            answer++;
        } else {
            num = num * 3 + 1;
            answer++;
        }
        
        if (num == 1) {
            break;
        }
        if (answer == 500) {
            answer = -1;
            break;
        }
    }
    return answer;
}

 


 

후기

 

 

이 문제는 코드 자체는 간단하게 작성할 수 있었는데

 

제한사항을 통해 8,000,000 미만 수를 계산한다는 가정 하에

단 3번 만에 값이 배로 늘어난 것이 확인 가능했다

 

짝수일 때는 / 2, 홀수일 때는 * 3 + 1 을 한번씩 하는 상황에서

num 이 1이 될때까지 계속 진행되는 코드인데 500번까지만 한다고 해도 엄청나게 숫자가 불어난다

 

그 탓인지 작은 수를 입력했을 때는 잘 나오는 코드가

큰 수만 나오면 빨간줄을 불러온다

 

num 값의 타입은 int 인데 int 의 표현 범위를 넘어서는 것 같다

그래서 처음부터 받아올 때 가장 표현 범위가 넓은 long 타입으로 변경해서 진행했다

 

이제 큰 수에도 정상작동 하는 것을 확인 가능