반응형
[문제]
입력된 수가 짝수: 나누기 2
입력된 수가 홀수: *3 +1
결과값이 1이 될 때까지 반복한다.
단, 주어진 수가 1인 경우 0을, 500번 반복할 때까지 1이 되지 않는다면 -1을 반환한다
[로직]
1. num이 1인 경우, 바로 0을 리턴해준다
2. 반복문을 돌며 짝수일 경우 /2 (이때 2로 나눠준 값이 1이면 바로 횟수를 리턴), 홀수일 경우 *3+1을 해준다.
3. 반복 횟수가 500번이 넘어갈 경우 -1을 리턴해준다.
[코드]
const n = 6;
function solution(num) {
if (num === 1) {
return 0;
}
for (let i = 0; i < 500; i++) {
if (num % 2 ===0) {
num = num/2;
if (num === 1) {
return i+1;
}
} else {
num = (num*3)+1;
}
}
return -1;
}
console.log(solution(n)); // 결과 값 : 8
1. num이 1인 경우, 바로 0을 리턴해준다
if (num === 1) {
return 0;
}
2. 반복문을 돌며 짝수일 경우 /2 (이때 2로 나눠준 값이 1이면 바로 횟수를 리턴), 홀수일 경우 *3+1을 해준다.
if (num === 1) {
return 0;
}
for (let i = 0; i < 500; i++) {
if (num % 2 === 0) {
num = num/2;
if (num === 1) {
return i+1; // i를 0부터 시작했으므로, 실제 횟수는 +1을 해줘야함.
}
} else {
num = (num*3)+1;
}
}
3. 반복 횟수가 500번이 넘어갈 경우 -1을 리턴해준다.
if (num === 1) {
return 0;
}
for (let i = 0; i < 500; i++) {
if (num % 2 ===0) {
num = num/2;
if (num === 1) {
return i+1;
}
} else {
num = (num*3)+1;
}
}
return -1;
}
다른 사람들은 어떻게 풀었나
function collatz(num) {
var answer = 0;
while(num !=1 && answer !=500){
num%2==0 ? num = num/2 : num = num*3 +1;
answer++;
}
return num == 1 ? answer : -1;
}
console.log( collatz(6) );
반응형
'나의 개발일지 > 알고리즘 테스트' 카테고리의 다른 글
[프로그래머스] 의상 - JavaScript (1) | 2024.10.14 |
---|---|
[프로그래머스 - Level 1] 하샤드 수 (JS) (0) | 2022.07.20 |
[프로그래머스 - Level 1] 이상한 문자 만들기 (JS) (0) | 2022.07.19 |
[프로그래머스 - Level 1] 정수 내림차순으로 배치하기 (JS) (0) | 2022.07.19 |
[프로그래머스 - Level 1] 서울에서 김서방 찾기 (JS) (0) | 2022.07.18 |