def solution(n, ans = 0):
if n % 2 == 0:
res = int(n / 2)
else:
ans += 1
res = int(n - 1 / 2)
if res == 1:
return ans + 1
return solution(res, ans)
주어진 값에서 2의 배수만큼 순간이동이 가능하므로 역으로 5라고 했을때 주어진 값에서 2의 배수인지 확인하고 아니라면 -1을 이동하고 2로 나누어 준다.
위 과정을 재귀함수로 불러와 주고 더 이상 이동이 불가능한 1이 떨어 졌을때 return을 해준다.
위 코드의 문제는 테스트 케이스가 만약 n 값이 1이라면 결과가 1로 떨어져야하는데 현재는 1일때 무한 재귀함수에 빠져서
RecursionError: maximum recursion depth exceeded in comparison
에러가 발생하는 문제가 있었다.
def solution(n, ans = 0):
if n == 1:
return 1
elif n % 2 == 0:
res = int(n / 2)
else:
ans += 1
res = int(n - 1 / 2)
if res == 1:
return ans + 1
return solution(res, ans)
간단하게 1값일때 처리를 해준다.