코드 풀이

콜라츠 추측

SammyK 2022. 3. 14. 14:13

풀이:

function solution(num) {
    let answer = 0
    for (let i = 0; i < 500; i++) {
        if (num !== 1) {
            if(num % 2 === 0) {
                num /= 2
            } else {
                num = num *3 +1
            }
        } else {
            return answer = i
        }   
    } 
    return answer = -1
}

심플하게 500번 반복문을 써주고, 그안에 만약 받은 정수가 1이 아니라면 실행해주는 if else 문을 썻다

만약 % 2 로 나머지값이 0 이라면 정수를 반으로 나누고 그값을 저장,

아니면 정수 * 3 + 1 값을 저장하는 방법으로 만약 받은 정수 값이 1이 된다면 몇번째의 반복문 값을 리턴,

만약 500번안에 못하면 -1 값을 리턴해준다. 

 

다른사람 풀이:

 

function collatz(num) {
    var answer = 0;
    while(num !=1 && answer !=500){
        num%2==0 ? num = num/2 : num = num*3 +1;
    answer++;
  }
    return num == 1 ? answer : -1;
}

이분은 condition 이 맞을때까지 돌려주는 반복문 while 을 썻다.

while condition 은 받은 정수가 1이 아니고 500번 안돌렸을떄이다.

그리고 실행을 할때마다 answer 에 카운트를 1씩 더함으로 정수가 1되는 순간 몇번 돌렸는지 보여준다.

만약 500번까지 정수값이 1이 아닐경우 -1 값을 돌려준다.

 


function collatz(num,count = 0) {
    return num == 1 ? (count >= 500 ? -1 : count) : collatz(num % 2 == 0 ? num / 2 : num * 3 + 1,++count);
}

 

'코드 풀이' 카테고리의 다른 글

같은 숫자는 싫어  (0) 2022.03.14
하샤드 수  (0) 2022.03.14
정수 제곱근 판별  (0) 2022.03.14
제일 작은 수 제거하기  (0) 2022.03.14
정수 내림차순으로 배치하기  (0) 2022.03.12