알고리즘/프로그래머스
콜라츠추측
이채야채
2021. 12. 9. 16:03
재귀..재귀로 풀면 될것같아서 재귀로 실행했다.
그치만. 계속 내 답은 0을 토해낸다.
function solution(num) {
let count = 0;
if(num ===1){
return count;
}
if(count>=500){
return -1
}
if(num %2 === 0){
num = num /2
count ++
}else if(num%2 === 1){
num = (num * 3) + 1
count ++
}
return solution(num)
}
이코드의 문제점은? let count = 0이기에. 계속해서 count = 0이되어 설령 계산이 잘되었다해서 return 값은 0이 될수밖에없다.
다시 도전해보자.
1. while문 풀이
function solution(num) {
let count = 0;
while(num !==1){
if(count >= 500){
return -1
}
num%2 === 0 ? num = num/2 : num = (num*3)+1
count++
}
return count;
}
2. 재귀 2차 실패
function solution(num) {
function recursive(input,count){
if(count>=500) return -1
if(input === 1) return count;
if(input%2 === 0) return recursive(input/2,count++)
else return recursive (input*3+1, count++)
}
return recursive(num,0)
}
무슨문제였고 하니.. count ++ 의 문제였다.
function solution(num) {
function recursive(input,count){
if(count>=500) return -1
if(input === 1) return count;
if(input%2 === 0) return recursive(input/2,++count)
else return recursive (input*3+1, ++count)
}
return recursive(num,0)
}
count++ 와 ++count 의 차이점?
count ++ 는 실행이 된후에 증가.
++count는 증가시켜준후에 실행.
count ++ 를 하게되면 계속 증가되지않은 0의 값이 들어가서 문제가되었던것.
오늘또 지식을 획득했습니다!
ㅜㅜ 오늘도 Happy coding!