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
'🖥️Frontend > Programmers' 카테고리의 다른 글
[JavaSciprt] 문자열 여러 번 뒤집기 (0) | 2024.06.05 |
---|---|
[JavaScript] 주사위 게임 3 (1) | 2024.06.05 |
[JavaScript] 수열과 구간 쿼리 4 (0) | 2024.06.04 |
[JavaScript] 수열과 구간 쿼리 2 (0) | 2024.06.03 |
[JavaScript] 수 조작하기2 (1) | 2024.06.03 |
댓글