문제
요약
- 콜라츠 추측 : 주어진 수가 짝수면 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