🖥️Frontend/Programmers

[JavaScript] 콜라츠 수열 만들기

뉴발자 2024. 6. 5.
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

문제

모든 자연수 x에 대해서 현재 값이 x이면, x가 짝수면 x를 2로 나누고, x가 홀수면 3 * x + 1로 바꾸는 것을 반복한다.

 

이 계산식을 반복해서 언젠가는 반드시 x가 1이 되는지 묻는 문제를 콜라츠 문제라고 한다.

 

그리고 위 과정을 거친 x의 모든 값을 기록한 것을 콜라츠 수열이라고 한다.

 

계산 결과 1000보다 작거나 같은 수는 언젠간 1에 도달한다는 것이 알려져 있다.

 

이때 1000보다 작은 자연수 n이 매개변수로 주어졌을 때 콜라츠 수열을 반환하는 함수를 작성해라. 

728x90

 

 

나의 풀이

function solution(n) {
  // 초기 값 n을 넣어준다.
  const arr = [n];

  // n이 0보다 크면 반복한다.
  while( n > 0 ) {
    // n이 홀수인 경우 : 3 * n + 1의 계산 값을 n에 넣어준다.
    // n이 짝수인 경우 : n /= 2 계산을 실행한다.
    n % 2 ? n = 3 * n + 1 : n /= 2;

    // 계산한 n값을 넣어준다
    arr.push(n);

    // n이 1일 경우 break
    if( n === 1 ) {
      break;
    }
  }

  return arr;
}

 

 

다른 풀이

function solution(n, arr = []) {
  arr.push(n)
  if (n === 1) return arr
  if (n % 2 === 0) return solution(n / 2, arr)
  return solution(3 * n + 1, arr)
}

 

 

 

 

 

 

 

 

 

 

728x90

댓글