알고리즘 !

 

이쯤되니 수학 문제집을 푸는건가 하는 생각이...

 

일단 내가 할 수 있는 일을 하자

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

+ Recent posts