Algorithm

[Swift] 프로그래머스 - 콜라츠 추측

배고픈개발자 2023. 7. 3. 09:45

func solution(_ num:Int) -> Int {

    func find(_ num :Int, _ count: Int = 0) -> Int {
        if num == 1 { return count}
        if count == 500 { return -1}

        if num % 2 == 0 {
            return find(num / 2, count + 1)
        } else {
            return find(num * 3 + 1, count + 1)
        }
    }
    
    return find(num)
}

 

재귀함수를 사용해서 풀었습니다.

num과 count를 파라미터로 정의하여 재귀호출 시 사용할 수 있도록 하였습니다. 

num이 1이 됐을 때는 count를 리턴하고, 500에 도달했을 경우는 불가능한 경우니까 -1을 리턴합니다.

 

짝수일 때는 num / 2를, 홀수일 때는 num * 3 + 1를 전달하고 return된 값을 다시 Return 합니다.

 

 

var count: Int = 0

func solution(_ num:Int) -> Int {
    
    if num == 1 { return count }
    if count == 500 { return -1 }
        
    count += 1
        
    if num % 2 == 0 {
        return solution(num / 2)
    } else {
        return solution(num * 3 + 1)
    }
    
}

또는 이렇게도 가능합니다.