콜라츠 추측 (자바스크립트)_프로그래머스

Jason Moon·2022년 5월 18일
0

알고리즘

목록 보기
6/8

문제 설명

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
626331 -1

풀이👌

function solution(num) {
    let count = 0;
    while (num < Number.MAX_SAFE_INTEGER) {
      if (num === 1) {
        break;
      } else if (num % 2 === 0) {
        num = num / 2;
      } else {
        num = num * 3 + 1;
      }
      count++;
    }
    if (count > 500) {
      count = -1;
    }
    return count;
  }

접근 방식🤔

다른 사람들의 풀이를 보니 훨씬 간단하게 푸는 사람도 많았다.
난 우선 반복문을 사용해서 짝수 홀수 일데 작업을 수행하고 +1을 해줘야겠다 생각했다. 반복횟수가 정해져 있지 않아서 while을 써줬고 num이 1이 되면 break로 반복문을 빠져 나오게 했다.

회고🤓

처음에 num이 들어갈 변수를 할당해줬었는데 어차피 매개변수 num으로 들어온 값이 반복문을 돌면서 num에 재할당되면서 1이 되어야 하니까 따로 num을 받을 변수를 할당해 주지 않았다.

다른 사람의 풀이를 보니 while문의 조건으로 두가지를 줘서 쉽게 처리했다. 처음에 조건을 정해서 거르면 더 간결한 코드를 작성할 수 있겠다는 걸 느꼈다.

📙 추가 공부

while 반복문

profile
어려워 보여도 시간을 들여서 해보면 누구나 할 수 있는 일이다

0개의 댓글

관련 채용 정보