알림
본 포스팅은 공부 목적으로 작성된 글이며 상업적 목적으로 절대 사용되지 않았음을 밝힙니다.
문제
https://programmers.co.kr/learn/courses/30/lessons/12943
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을 반환해 주세요.
풀이
조건문으로 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더해줍니다. 하지만 이러한 작업을 500번 반복해도 1이 되지 않는다면 -1을 반환해 주면 되는데요?
그렇기 때문에, 반복문으로 500번까지 위와 같은 작업으로 1이 되지 않는다면 마지막에 -1을 리턴해 주면 됩니다.
코드
function solution(num) {
for(let i = 0; i < 500; i++) { // 500번 돌기
if (num !== 1) { // 입력 숫자가 1이 아닐 시,
num = num % 2 == 0 ? num / 2 : num * 3 + 1
} else { // 만약 1이라면
return i // 바로 반복 횟수를 출력
}
}
return -1; // 500번 초과되면 -1 출력
}
'Algorithm > Programmers' 카테고리의 다른 글
[Programmers] 가장 큰 수(JavaScript) (0) | 2022.05.01 |
---|---|
[Programmers] 피보나치 수(JavaScript) (0) | 2022.04.30 |
[Programmers] 하샤드 수(JavaScript) (0) | 2022.04.28 |
[Programmers] 최대공약수와 최소공배수(JavaScript) (0) | 2022.04.26 |
[Programmers] 직사각형 별 찍기(JavaScript) (0) | 2022.04.25 |
댓글