알고리즘 !
이쯤되니 수학 문제집을 푸는건가 하는 생각이...
일단 내가 할 수 있는 일을 하자
function solution(num) {
var answer = 0;
var count = 0;
while (count <= 500) {
if (num === 1) {
answer = count;
break;
}
else if (num % 2 == 0) {
num = num / 2;
count += 1;
}
else if ( num % 2 != 0) {
num = num * 3 + 1;
count += 1;
}
}
if ( count > 500) { answer = -1;}
return answer;
}
문제를 그대로 코드로 만든 수준의 결과가 완성되었다.
이래저래 설명할것도 없이 직관적이지만.. 좋은 코드라고 보기엔 어렵다.
다른사람의 풀이 중, 이해할 만한 수준의 코드를 가져와 보았다
우선,
num 이 1 이 되었을 때 즉시 return 을 하는것으로 코드가 간결해졌다.
return 으로 함수 전체가 종료되기 때문에 break 를 사용할 필요가 없다.
1이 아닐 때, 카운트를 1 증가시키고
num이 짝수일 땐 나누기 2
그외 (홀수) 일 땐 곱하기3 +1 을 해주는 코드를 한줄로 만들고
while count가 500 이상이 된다면, while문 반복을 중단하고 -1 을 return 하게 되는것으로 마무리가 된다.
눈 여겨볼 포인트는
while 문에 break 없이 return 으로 간결하게 코드를 짤 수 있다는 것과
A = 조건 ? true : false 구문을 유연하게 사용할 줄 알아야 한다는 것
아마 else if 보다 빠르게 연산될 것으로 보이기에 효율 면에서도 뛰어날듯 하다.
'사전캠프' 카테고리의 다른 글
24일차 - 알고리즘 풀이 (1) | 2024.07.23 |
---|---|
23일차 - 알고리즘 풀이 (3) | 2024.07.22 |
21일차 - Javascript 입문 수업 (0) | 2024.07.18 |
20일차 - Javascript 입문 수업 (0) | 2024.07.17 |
19일차 - Javascript 입문 수업 (1) | 2024.07.16 |