[프로그래머스] Level.1 콜라츠 추측

박의진·2022년 9월 11일
0

코딩테스트

목록 보기
15/25

1. 재귀 사용 안 함

class Solution {
    public int solution(int num) {
        int answer = 0;
        int count = 0;
        long res = (long) num; // num의 오버플로우로 long으로 형변환... 생각도 못함
        
        while(res!=1){
            if(count<500){
                if(res%2==0){
                    res = res/2;
                    count ++ ;
                }else{
                    res = res*3+1;
                    count ++ ;
                }
            }else{
                count = -1;
                break;
            }
        } 
        answer = count;
        return answer;
    }
}

2. 재귀 사용 함

class Solution {
    public int solution(int num) {
        int answer = 0;
        int count = 0;
        long res = (long) num; // num의 오버플로우로 long으로 형변환... 생각도 못함
        
        answer= func(res, count);
        return answer;
    }
    
    int func (long n, int count){
        if(n==1)
            return count;
        if(count >=500)
            return -1;
        return n%2==0 ? func(n/2,++count) : func(n*3+1,++count);
        
    }
}

2번째 방법에서 후위 연산자가 아닌 전위연산자 ++count로 하니까 재귀함수가 정상 작동이 됐다...

홀->짝->홀->짝 이 반복되는 경우에 num에서 int 오버플로우가 발생할 수 있다고 한다... 그래서 long으로 형변환을 해주고 시작했다.어차피 반환 돼야 하는 결과 값은 int의 count니까.

profile
주니어 개발자의 개발일지

0개의 댓글