csmoon1010의 SW 블로그

[200514] 콜라츠 추측 - 연습문제(level1) 본문

Coding Test/프로그래머스

[200514] 콜라츠 추측 - 연습문제(level1)

csmoon1010 2020. 5. 14. 11:37

1. 문제이해

- collatz 추측을 진행

1-1. 짝수 :  2로 나눈다.
1-2. 홀수 : 3을 곱하고 1을 더한다.
2. 같은 작업을 1이 될 때까지 반복

 

2. 전략

- num이 1이 아닌동안 1-1, 1-2의 과정 반복

: (num % 2 == 0) ? (num / 2) : (num * 3 + 1)

- 수행할 때마다 answer++하고 500이상이되면 -1로 바꾸고 break

 

3. 참고사항

- 계속 홀수가 된다면 곱하는 과정이 반복되므로 int의 범위를 벗어나 overflow 발생

--> 수가 커질 가능성이 있다면 long타입을 생각해보자!!

 

4. 코드

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