프로그래머스

우선 홀짝을 구분하는것을 생각하자 제일 무난한건 %2인데 그냥 마지막 수가 0 2 4 6 8 인걸 구분하는 방법도 있다. 그런데 마지막 수를 구하는것 자체가 %10을 해야하므로 불필요한 작업만 하나 추가되는 것이다. 그냥 %2가 더 나은 방법이라고 생각된다.

일률적으로 500번씩 더했다. 500회 이상이 될때까지 하는 것이 아니라 500회 일때 루프 밖으로 나가는 것이기 때문에 for문부터 고쳐야겠다.

answer는 보조적인 목적이지 주 목적이 아니기 때문에 이렇게 해서는 안된다. for문으로는 부적절해보이니 while문으로 짜보자.
나의 풀이
function solution(num) {
var answer = 0;
while (num != 1){
if(answer >= 500) {
return -1
}
if(num%2 === 0) {
num = num/2
} else {
num = num*3+1
}
answer ++
}
return answer;
}
다른 사람의 풀이
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;
}
while문의 조건을 두개 넣고 500인 경우에 대한 예외를 루프 밖에 둔것이 인상적이다.
속도 비교
나의 풀이 : 0.055 ms
남의 풀이 : 2.618 ms
코드 자체는 다른 사람이 더 잘짰다고 생각햇는데 속도가 47.6배나 난다... 하지만 while문의 2중 조건을 건뒤 루프 밖에서 answer를 고치는건 왠지 속도 상승의 여지가 있어보인다. 적용해보자.

while문의 조건만 바꿨을 뿐인데 2배 이상 느려졌다.
아무래도 while문에 조건을 두개 넣는것보다는 하나의 조건은 반복문 안에 넣는것이 좋은 것같다.