알고리즘/Programmers

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

개발자 정지은 2023. 5. 25. 14:12

풀이 방법

짝수일 경우와 홀수일 경우에서 주어진 조건대로 연산해준다.

그 과정을 거치면서 num이 1이 될 때의 answer를 출력해주는데 int의 범위에 신경을 써주어야 하는 문제였다.

 

틀린 코드

class Solution {
    public int solution(int num) {
        int answer = 0;
        int cnt = 0;
        
        while(true) {
            if(num == 1 ){
                answer = 0;
                break;
            }
            //짝수일 때
            if(num % 2 == 0 ){
                num = num / 2;
                answer++;
                if(answer >= 500) {
                    answer = -1;
                    break;
                }
                if(num == 1) {
                    break;
                }
            }
            //홀수일 때
            if(num % 2 == 1) {
                num = (num * 3) + 1;
                answer++;
                if(answer >= 500) {
                    answer = -1;
                    break;
                }
                if(num == 1) {
                    break;
                }
            }

        }
        
        return answer;
    }
}

3번째 테스트 케이스에서 시간 초과가 떴다.

테스트 케이스 3번인 626331을 계산할 때 int의 범위를 넘어서기 때문에 long으로 고쳐줘야 한다.

 

정답 코드

class Solution {
    public int solution(long num) {
        int answer = 0;
        
        while(true) {
            //1이면 바로 0을 return
            if(num == 1 ){
                answer = 0;
                break;
            }
            //짝수일 때
            if(num % 2 == 0 ){
                num = num / 2;
                answer++;
                //1이 되면 멈춘다
                if(num == 1) {
                    break;
                }
            }
            //홀수일 때
            if(num % 2 == 1) {
                num = (num * 3) + 1;
                answer++;
                if(num == 1) {
                    break;
                }
            }

        }
        //500 이상이라면 -1 
        if(answer >= 500) {
            answer = -1;
        }
        
        return answer;
    }
}