코딩테스트 콜라츠 수열 컨텐츠
문제 설명

출력 예시

콜라츠 문제란?
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] 이 출력됩니다.