문제 풀기/C#

23. 콜라츠 추측

kagan-draca 2025. 1. 15. 14:11

 

문제를 보고 do-while문과 삼항 연산자를 활용해서 계산 횟수를 측정하기로 했다.

그래서 아래와 같이 코드를 작성한 후 테스트를 진행하니

 

using System;

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

 

 

테스트 3번에서 오류가 발생하는 것을 발견했다.

 

이유를 찾고자 Console.WriteLine()을 활용해 

Console.WriteLine(num+", "+count);

 

do-while 내에서

num과 count를 찍어보니

 

 

실행 도중 num의 값이 짝수가 아닐 경우 num * 3 + 1을 당해서

int형 범위를 벗어나는 현상을 감지했다.

그래서,

 

using System;

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

 

위와 같이 int 형 매개변수 num을 long 타입으로 변경해서 다시 테스트를 진행한 결과

 

 

위와 같이 모든 테스트를 통과할 수 있었다.