TIL_230419- 프로그래머스 Lv1 콜라츠추측

정윤숙·2023년 4월 19일
0

TIL

목록 보기
151/192
post-thumbnail

📒 오늘의 공부

1. 프로그래머스

Lv1. 콜라츠 추측

나의 풀이

function solution(num) {
    let newNum = 0;
    let newNumArr = [];
    if(num === 1){
        return 0
    }
    if(num%2 === 0){
            newNum = num/2
            newNumArr.push(newNum)
        }
        else{
            newNum = (num*3)+1
            newNumArr.push(newNum)
        }
    
    let i = 0;

    do{
        if(newNumArr[i]%2 === 0){
            newNum = newNumArr[i]/2
            newNumArr.push(newNum)
            i++
        }
        else{
            newNum = (newNumArr[i]*3)+1
            newNumArr.push(newNum)
            i++
        }
    }while(newNumArr[newNumArr.length-1] !== 1)
        
        if(i > 500){
            return -1
        }
    else{
                return i+1
}
}
  • while(newNumArr[newNumArr.length-1] !== 1)

    • newNumArr의 마지막 요소가 1이 아닐 때 반복문이 계속해서 실행되도록 설정
    • 조건식을 === 1로 설정하면, newNumArr의 마지막 요소가 1이 되어야만 반복문이 종료되므로, newNumArr 배열에 1을 추가해주지 않는 이상 무한 루프에 빠지게 된다.
  • 반환값이 i+1인 이유

    • i는 마지막 요소가 1일 때까지의 요소 개수를 의미하기 때문에 1이 포함된 요소 개수는 i+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;
}
  • answer, 삼항 이용
function collatz(num, count = 0) {
    return (num == 1) ? ((count >= 500) ? -1 : count) : collatz((num % 2 == 0) ? num / 2 : (num * 3) + 1, ++count);
}
  • 재귀함수 이용
profile
프론트엔드 개발자

0개의 댓글