코딩 테스트 연습/프로그래머스 level 1

[프로그래머스] lv1. 콜라츠 추측 (JS)

카누가 좋아요 2023. 7. 6. 18:15

❓ 문제

코딩테스트 연습 - 콜라츠 추측 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

💡 해결하기

문제에서 주어진 조건 그대로 코딩하면 된다. 이 문제는 재귀 혹은 반복문으로 풀 수 있다.

 

조건 1-1. 입력된 수가 짝수라면 2로 나눈다.

조건 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더한다.

조건 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복한다.

+ 주어진 수가 1이면 0 반환, 500번 작업 반복할 때까지 1이 되지 않는다면 -1 반환

 

조건을 살펴보니 재귀와 반복문의 종료 조건은 조건 1-1, 1-2에 따라 입력된 수에 연산을 계속 적용시킨 결과 1이 나왔을 때(여기에 주어진 수가 1인 경우도 포함), 작업을 반복한 횟수가 500번일 때이다.

그 종료 조건에 다다르기 전까지는 조건문(1-1 또는 1-2)을 거칠 때마다 카운트를 1씩 증가시키며 기록하면 된다. 

 

 

 

💻 JS로 코드 작성하기

1️⃣ 재귀

 

function Collatz(num, cnt) {
  if (num === 1) return cnt;
  else if (cnt === 500) return -1;
  else if (num % 2 === 0) return Collatz(num / 2, cnt + 1);
  else if (num % 2 === 1) return Collatz(num * 3 + 1, cnt + 1);
}

function solution(num) {
  return Collatz(num, 0);
}

 

 

2️⃣ 반복문 (while)

 

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