[Today I Learned] 1월 4주차 day1

suwoncityboyyy·2023년 1월 23일
0

lv1 콜라츠 추측

문제 풀이

function solution(num) {
  // 짝수면 2로 나누기 , 홀수면 3을 곱하고 1 더하기 , 이걸 1이 될때까지 반복
  let cnt = 0;

  // while 무한반복인데 몇번해야될지모를떄 근데 멈추는 건 언제인지알때
  // for 몇번까지 해야하는지 알때
  while (num !== 1) {
    if (num % 2 === 0) {
      num = num / 2;
    } else if (num % 2 === 1) {
      num = num * 3 + 1;
    }
    cnt += 1;
  }
  return cnt >= 500 ? -1 : cnt;
}

위에 코드는 while 문을 이용해서 문제를 해결했다. 하지만 재귀함수로도 문제를 풀 수 있을것 같아서 예전에 팩토리얼문제 풀때의 코드를 활용해서 문제를 다시 풀어봤다.

문제풀이 2

function solution(n) {
  let count = 0;
  // while 무한반복인데 몇번해야될지모를떄 근데 멈추는 건 언제인지알때
  // for 몇번까지 해야하는지 알때
  // while => 재귀도 쓸 수있음.
  const collatz = (n) => {
    if (n === 1) return count;
    count++;
    return collatz(n % 2 ? n * 3 + 1 : n / 2);
  };
  return collatz(n) > 500 ? -1 : count;
}
profile
주니어 개발자 기술노트

0개의 댓글