문제

[프로그래머스] 콜라츠 추측 (LV. 1)

요약

  • 콜라츠 추측 : 주어진 수가 짝수면 2로 나누고 홀수면 3을 곱한 뒤 1을 더하는 작업을 반복하면, 모든 수를 1로 만들 수 있다.
  • 몇 번의 작업을 반복해야 하는지 반환, 500 넘게 작업을 했는데도 1이 되지 않으면 -1을 반환

분류

  • 재귀

풀이

1. 내 풀이

  • 발상 : for 문으로도 풀 수 있다. 재귀를 사용해보자
  • 파이썬에서 함수를 정의할 때, 인수의 기본값을 정해주면 ans를 전달받지 못했을 때 기본값이 들어간다.

<재귀 풀이>

def solution(num, ans = 1):
    if num == 1 : return 0
    if ans >= 500 : return -1
    num = num / 2 if num % 2 == 0 else num * 3 + 1
    if num == 1 : return ans
    return solution(num, ans + 1)

<반복문 풀이>

def solution(num):
    cnt = 0
    while num != 1:
        if cnt == 501 : return -1
        num = num / 2 if num % 2 == 0 else num * 3 + 1
        cnt += 1
    return cnt