콜라츠 추측

Sheryl Yun·2023년 6월 26일
0

문제 링크🔗

내 풀이

function calcNum(result) {
    if (result % 2 === 0) return result / 2;
    else return result * 3  + 1;
}

function solution(num) {
    let answer = 0;
    
    if (num === 1) return 0;
    
    let result = num;

    while (result !== 1) {
        result = calcNum(result)
        answer++;
        
        if (answer === 500) return -1; 
    }
    
    return answer;
}

num이 1이 아니라면 처음에는 result라는 변수에 num을 새로 담았는데
앞에 num이 1인지 여부를 먼저 판단한 이후의 연산이므로 따로 담을 필요가 없었다.

다른 사람 풀이에서는 while문 안에 조건을 2개 넣었는데 나는 이 부분이 가독성이 떨어진다고 생각해서 그냥 while문 안에서 if문으로 탈출 조건을 걸어주었다.

다른 사람 풀이

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

최종 풀이

  • num 계산을 함수로 따로 빼지 않고 삼항 연산자 사용
  • result라는 새로운 변수에 담지 않고 num 그대로 사용
function solution(num) {
   let answer = 0;
    
   if (num === 1) return 0;
    
    while (num !== 1) {
        num = num % 2 === 0 ? num / 2 : num * 3 + 1;
        answer++;
        
        if (answer === 500) return -1;
    }
  
    return answer;
}

문제 키워드

  • while문
  • 삼항 연산자
profile
영어강사, 프론트엔드 개발자를 거쳐 데이터 분석가를 준비하고 있습니다 ─ 데이터분석 블로그: https://cherylog.tistory.com/

0개의 댓글