코딩 테스트 연습/프로그래머스 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;
}