알고리즘

[프로그래머스] 콜라츠 추측(Java) *

muerha 2024. 11. 7. 21:50

 

 

 

 

 


 

 

 

나의 코드

class Solution {
    public int solution(int num) {
        int count = 0;
        
         if (num == 1) {
            return 0;
        }
        
        while( num != 1){
            if(num % 2 == 0){
                num /= 2;
            }else {
                num = (num * 3) + 1;
            }
            count ++;
            
            if(count == 500){
                return -1;
            }
        }
        
        return count;
    }
}

 

이렇게 돌렸는데..

 

테스트 3
입력값 626331
기댓값 -1
실행 결과 실행한 결괏값 488이 기댓값 -1과 다릅니다.

 

테스트를 통과하지 못했다.. 이유를 찾아보니

횟수가 증가하면서 숫자가 커져 오버플로우가 발생한 것을 알게되었다.

 

 

class Solution {
    public int solution(long num) {
        int count = 0;
        
         if (num == 1) {
            return 0;
        }
        
        while( num != 1){
            if(num % 2 == 0){
                num /= 2;
            }else {
                num = (num * 3) + 1;
            }
            count ++;
            
            if(count == 500){
                return -1;
            }
        }
        
        return count;
    }
}

 

매개변수를 Long 타입으로 바꿔주니 해결되었다.

 

 

 

 

다른 사람의 풀이

class Collatz {
    public int collatz(int num) {
    long n = (long)num;
    for(int i=0; i<500; i++){
        if(n==1) return i; 
      n = (n%2==0) ? n/2 : n*3+1;
    }

        return -1;
    }
}