코딩/코딩테스트

프로그래머스) 콜라츠 추측 -JS

이즈99 2024. 5. 7. 19:26
728x90

내가 짠 코드

function solution(num) {
    var answer = 0;
    let count = 0;
    
    while(num !== 1)
    {
        if(count > 500)
            {
                answer = -1;
                break;
            }
        
        if(num % 2 === 0)
            {
                num = num / 2;
            }
        
        else
            {
                num = num * 3 + 1;
            }
        
        count++;
    }
    answer = count;
    
    if(count > 500)
        {
            answer = -1;
        }
    
    return answer;
}

풀이)

우선 언제까지 돌아야하는 횟수에 제한이 명확하지 않기때문에 while()문을 이용하였다. while이 1이되면 해당 while은 끝나고 혹은 500번 이상이 되면 while문이 끝나게 코드를 작성하였다. 그러고 난 다음 단순히 조건을 작성하면 되는데 num을 2로 나눴을때 나머지값이 0이면 짝수이므로 짝수에 해당하는 조건이 num 을 나누기 2해주었다. 나눴을때 나머지가 존재하면 홀수이기 때문에 홀수의 조건인 num에 3을 곱하고 1을 더해주면 조건을 다 작성한 것이고 끝나고 나왔을때 count가 500번 이상이면 answer에 -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;
}

굉장히 깔끔하게 잘 작성하신 것 같다. 조건문을 num이 1이거나 answer이 500이거나로 작성하였고, 삼황연산자를 통해 num%2==0 즉 짝수이면 짝수조건을 true인 왼쪽에 아니면 홀수이므로 오른족에 배치를 하였다. 그리고 해당 while이 끝난다면 num이 1이라면이라는 삼황연산자를 통해 answer이거나 -1을 return하게끔 하였다.

확실히 삼황연산자를 이용하면 되게 깔끔하게 나오는 상황이 많은 것 같다.