개발하는 고양이 오이

18. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 콜라츠 추측 / 다른 사람의 풀이 본문

코딩테스트 - JAVA/프로그래머스 Programmers

18. [JAVA] 프로그래머스 코딩테스트 연습 Level.1 - 콜라츠 추측 / 다른 사람의 풀이

Cucum 2022. 4. 29. 17:35

https://programmers.co.kr/learn/challenges

 

코딩테스트 연습

기초부터 차근차근, 직접 코드를 작성해 보세요.

programmers.co.kr

 

프로그래머스 코딩테스트 연습 Level.1 - 콜라츠 추측 



풀이

class Solution {
    public int solution(long num) {
        int answer = 0;
              
        // num 이 1이 될 때까지 반복(while)
        while(num != 1) {
            if (num % 2 == 0) {		// num이 짝수이면
                num /= 2;			// 2 나누기
                answer++;

                if (num == 1) {		// 이때 num이 1이 되면 break
                    break;
                }
            }    

            if (num % 2 != 0) {		// num이 홀수이면
                num = num * 3 + 1;		// 3 곱하고 1 더하기
                answer++;

                if (num == 1) {		// 이때 num이 1이 되면 break
                    break;
                }
            } 

            if (answer > 500) {		// 500 번 반복(answer 값)보다 많아지면 -1
                answer = -1;
                break;
                
            } 
        }
        return answer;
    }
}

 


(풀이 실패 과정)

class Solution {
    public int solution(int num) {
        int answer = 0;
              
        while(num != 1) {
            if (num % 2 == 0) {
                num /= 2;
                answer++;

                if (num == 1) {
                    break;
                }
            }    

            if (num % 2 != 0) {
                num = num * 3 + 1;
                answer++;

                if (num == 1) {
                    break;
                }
            } 

            if (answer > 500) {
                answer = -1;
                break;
                
            } 
        }
        return answer;
    }
}

 

홀수 -> 짝수 -> 홀수 -> 짝수 형태를 계속 반복하다보면 num이 int 형이기때문에 오버플로우 발생.

-> num을 long으로 변경하거나, long I = (long) num; 이런식으로 형변환을 해주면 됨

 


다른 사람의 풀이

 

삼항 연산자로 간단하게 해결