알고리즘, 코딩테스트/알고리즘 풀이

[프로그래머스/ 코딩테스트 연습문제] 콜라츠 추측

jiyoon0000 2024. 11. 4. 09:43

Q. 콜라츠 추측

A.

class Solution {
    public int solution(int num) {
        int answer = 0;
        long longNum = Long.valueOf(num); // num이 커질수록 int형의 범위를 벗어나니까 num을 long으로 형변환 해줌
        
//조건이 참일때 답을 반환
        while(true){
//num이 1이거나 작업반복 횟수가 500이면 정지, 아닐 경우 작업횟수 1 증가
            if(longNum == 1 || answer >= 500)
                break;
                answer++;
            
//짝수 = 2로 나눴을 때 나머지 0, 홀수 = 2로 나눴을때 나머지가 0이 아님
//num 이 짝수일 경우 2로 나누고
//num이 홀수일 경우 3을 곱한 뒤에 1을 더한다.
            if((longNum%2) == 0){
                longNum /= 2;
            }else if((longNum%2) != 0){
                longNum = longNum * 3 + 1;
            }
        }
//num이 1이 됐다면 작업반복횟수 answer를 반환하고 500번 반복할때까지 1이 안됐다면 -1을 반환
        if(longNum == 1){
            return answer;
        }else{
            return -1;
        }
    }
}