Programing/Algorithm

콜라츠 추측

2021. 8. 27. 19:52
반응형
https://www.quantamagazine.org/mathematician-terence-tao-and-the-collatz-conjecture-20191211/

문제설명

1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 

작업은 다음과 같습니다.

1-1. 입력된 수가 짝수라면 2로 나눕니다.
1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다.
2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다.

예를 들어, 입력된 수가 6이라면 6→3→10→5→16→8→4→2→1 이 되어 총 8번 만에 1이 됩니다. 

위 작업을 몇 번이나 반복해야하는지 반환하는 함수, solution을 완성해 주세요. 

단, 작업을 500번을 반복해도 1이 되지 않는다면 –1을 반환해 주세요.

 

제한 사항

입력된 수, num은 1 이상 8000000 미만인 정수입니다.

 

입출력 예

n result 설명
6 8 문제의 설명과 같습니다.
16 4 16 -> 8 -> 4 -> 2 -> 1 이되어 총 4번만에 1이 됩니다.
626331 -1 626331은 500번을 시도해도 1이 되지 못하므로 -1을 리턴해야합니다.

 

풀이

function solution(num) 
{
    var cnt = 0;

    while (num > 1 && cnt < 500)
    {
        num = num % 2 ? (num*3+1) : (num/2);
        cnt++;
    }

    return num === 1 ? cnt : -1;
}

재귀 함수를 이용한 풀이 법

function solution(num, cnt = 0) 
{
    return num === 1 ? 
        (cnt < 500 ? cnt : -1) : 
        solution(num % 2 ? (num*3+1) : (num/2)
    , ++cnt);
}

 

반응형

'Programing > Algorithm' 카테고리의 다른 글

선택 정렬 (Selection Sort) 설명과 JavaScript 예제  (0) 2025.05.21
버블 정렬 (Bubble Sort) 설명과 JavaScript 예제  (0) 2025.05.21
jvascript array 경우의 수 구하기 (permute)  (0) 2022.02.15
LRU Cache (Least Recently Used) / 프로그래머스 캐시  (0) 2022.01.19
하샤드의 수 (Harshad Number)  (0) 2021.08.25
덧셈 뺄셈 동적 계산 (dynamic plus minus, Dynamic addition and subtraction)  (0) 2019.07.19
주민등록번호 체계 및 유효성 검사 (javascript)  (2) 2016.10.07
퀵 정렬(Quick Sort) (javascript)  (0) 2016.05.31
'Programing/Algorithm' 카테고리의 다른 글
  • jvascript array 경우의 수 구하기 (permute)
  • LRU Cache (Least Recently Used) / 프로그래머스 캐시
  • 하샤드의 수 (Harshad Number)
  • 덧셈 뺄셈 동적 계산 (dynamic plus minus, Dynamic addition and subtraction)
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    위시리스트
    It
    SQL
    IT블로그
    IT 관련
    자바스크립트
    js패턴
    jsp
    블로그
    php
    기초
    iT's MY LiFE
    Java
    자바
    디자인패턴
    읽고 싶은 책
    자바스크립트유틸
    JavaScript
    IT·컴퓨터
    사고 싶은 책
Dongkkase
콜라츠 추측
상단으로

티스토리툴바