코딩테스트

코딩테스트 콜라츠 수열 컨텐츠

김도현2 2023. 7. 3. 20:29
반응형

코딩테스트 콜라츠 수열 컨텐츠

문제 설명

 

출력 예시

 

콜라츠 문제란?

 

1을 제외한 아무 자연수나 생각한 다음 그게 홀수라면 3을 곱한 다음 1을 더하고, 짝수라면 2로 나눈다. 그렇게 나온 수를 다시 저 식에 집어 넣고 이하 반복, 이걸 계속하다 보면 1이 나온다는 것이다. 예를 들어 5에서 시작하면, 5는 홀수니까 3×5+1=16이 되고, 16은 짝수니까 16/2=8, 이후 4와 2를 거쳐 1에 도달하게 된다.

 

https://namu.wiki/w/%EC%BD%9C%EB%9D%BC%EC%B8%A0%20%EC%B6%94%EC%B8%A1

 

콜라츠 추측 - 나무위키

만약 이 추측이 거짓이라면, 1로 가지 않는 반례가 존재한다는 것을 의미한다. 수학자들은 이런 대표적인 반례에 대해서 자기 자신으로 순환하는 루프가 존재할 것으로 예상한다[11]. 예를들어

namu.wiki

 

여튼 정수 n이 주어 지는데 콜라츠 식을 이용하여 n이 1이 될때까지 기록을 출력하면 됩니다.

 

 

let n = 10;
var answer = [];

answer.push(n);
while(n>1){
    if(n%2 == 0){
        n = n/2;
        answer.push(n)
    }else if(n%2 == 1){
        n = 3 * n + 1;
        answer.push(n)
    } else {
        break;
    }
}

//[10, 5, 16, 8, 4, 2, 1]

콜라츠 문제는 정수가 짝수일 땐 나누기 2를 하고, 홀수일 땐 3을 곱하고 1을 더하는 것을 반복하면

언젠간 n이 1이 된다는 문제입니다.

 

n이 얼마나 나올지 모르니 계속 나누고 곱하고 반복해야 하기 때문에 while문을 사용했습니다.

반복문 안에서 n이 짝수일 시 2로 나눠주고, 홀수일 시 3을 곱하고 1을 더해줍니다.

나누거나 곱할때 마다 answer에 push를 하여 기록해줍니다.

 

그렇다면 answer 는 콜라츠 문제의 기록을 하는거므로 

[10, 5, 16, 8 , 4, 2, 1] 이 출력됩니다.