728x90
내가 짠 코드
function solution(num) {
var answer = 0;
let count = 0;
while(num !== 1)
{
if(count > 500)
{
answer = -1;
break;
}
if(num % 2 === 0)
{
num = num / 2;
}
else
{
num = num * 3 + 1;
}
count++;
}
answer = count;
if(count > 500)
{
answer = -1;
}
return answer;
}
풀이)
우선 언제까지 돌아야하는 횟수에 제한이 명확하지 않기때문에 while()문을 이용하였다. while이 1이되면 해당 while은 끝나고 혹은 500번 이상이 되면 while문이 끝나게 코드를 작성하였다. 그러고 난 다음 단순히 조건을 작성하면 되는데 num을 2로 나눴을때 나머지값이 0이면 짝수이므로 짝수에 해당하는 조건이 num 을 나누기 2해주었다. 나눴을때 나머지가 존재하면 홀수이기 때문에 홀수의 조건인 num에 3을 곱하고 1을 더해주면 조건을 다 작성한 것이고 끝나고 나왔을때 count가 500번 이상이면 answer에 -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;
}
굉장히 깔끔하게 잘 작성하신 것 같다. 조건문을 num이 1이거나 answer이 500이거나로 작성하였고, 삼황연산자를 통해 num%2==0 즉 짝수이면 짝수조건을 true인 왼쪽에 아니면 홀수이므로 오른족에 배치를 하였다. 그리고 해당 while이 끝난다면 num이 1이라면이라는 삼황연산자를 통해 answer이거나 -1을 return하게끔 하였다.
확실히 삼황연산자를 이용하면 되게 깔끔하게 나오는 상황이 많은 것 같다.
'코딩 > 코딩테스트' 카테고리의 다른 글
[프로그래머스/JS]직사각형 별찍기 (0) | 2024.05.22 |
---|---|
[프로그래머스/JS] 행렬의 덧셈 (0) | 2024.05.21 |
[프로그래머스/JS] 약수의 개수와 덧셈 (0) | 2024.05.17 |
[프로그래머스/JS] 나누어 떨어지는 숫자 배열 (0) | 2024.05.09 |
프로그래머스) 정수 내림차순으로 배치하기 -JS (0) | 2024.05.07 |