1 minute read

Category : 조건문, 구현, Modulo

콜라츠 추측?

  • 위키피디아 - 콜라츠 추측
  • 우박수열 : 숫자가 커졌다 작아졌다를 반복하며 결국 1에 수렴하는 것
    • 비구름에서 빗방울이 오르락내리락하며 우박이 되는 모습에 빗댐
    • T(n) = n / 2 (if n is even), 3n + 1 (if n is odd)
    • 이 함수를 모든 자연수 n에 대해 유한번 재귀 반복하면 1로 간다는 추측
  • 문제는 간단한 알고리즘이이다. 하지만, 콜라츠 추측의 반례는 아직도 나오지 않았다. 이 추측은 86년이 넘도록 풀리지 않고 있다고합니다❗️

FLOW.

  • 문제 상세보기
  • 주어진 조건문을 그대로 구현하는 간단한 알고리즘 입니다.
  • while(num ≠ 1) : num 이 1이 아닌 동안 계속 반복합니다.
  • 짝수, 홀수 판별에 Modulo 연산(%) 을 사용합니다.
    • boolean isOdd(int num) : 짝수, 홀수 판별 함수
  • answer 이 500이라면 -1을 return

Code.

class Solution {
    public int solution(int num) {
        int answer = 0;
        while(num != 1) {
            if(!isOdd(num))
                num = num / 2;
            else
                num = num * 3 + 1;
               
            answer++;   
            if(answer == 500) {
                return -1;
            }
        }
        return answer;
    }
    
    private boolean isOdd(int num) {
        return num % 2 == 1;
    }
}
function solution(num) {
    let answer = 0;
    while(num != 1) {
        if(num % 2 === 0) {
            num = num / 2;
        } else {
            num = (num * 3) + 1;
        }
        answer++;
        if(answer === 500) {
            return -1;
        }
    }
    return answer;
}

Leave a comment