C# 알고리즘 코드카타

23. 콜라츠 추측

잼잼재미 2023. 11. 9. 09:52

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

 * 계산과정에서 num이 int형 범위를 넘어가는 경우를 생각해서, long으로 계산

 

처음에 코드가 맞는데 계속 입출력 예 #3에서 계속 오류 생겨서 한참을 생각했다.

앞서 알고리즘을 풀면서 형변환이나 자료형 범위를 벗어서나 오류가 생기는 경우가 문득 생각이 났다.

입출력 예 #3 처럼 큰 수가 초기 num 값이라면, 곱하기와 더하기를 계속 하다보면 ing형 범위를 벗어나는 것이 아닐까 라는 생각이 들었고, 계산 과정 식을 long형으로 진행하니 오류가 나지 않았다.

'C# 알고리즘 코드카타' 카테고리의 다른 글

25. 나누어 떨어지는 숫자 배열  (0) 2023.11.10
24. 서울에서 김서방 찾기  (0) 2023.11.09
22. 두 정수 사이의 합  (0) 2023.11.08
21. 하샤드 수  (0) 2023.11.08
20. 정수 내림차순으로 배치하기  (0) 2023.11.07