코딩/코딩테스트
프로그래머스) 콜라츠 추측 -JS
이즈99
2024. 5. 7. 19:26
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하게끔 하였다.
확실히 삼황연산자를 이용하면 되게 깔끔하게 나오는 상황이 많은 것 같다.