피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.
예를들어
와 같이 이어집니다.
2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.
n | return |
---|---|
3 | 2 |
5 | 5 |
def solution(n):
if n < 2:
return n
answer = [0, 1]
for i in range(2, n + 1):
answer.append(answer[i - 1] + answer[i - 2])
return answer[n] % 1234567
피보나치 수를 재귀함수로 구현하는 것은 예전에 해봤던 기억이 있었다. 그래서 이번에는 bottom-up 방식으로 피보나치를 구현해보고자 하였다.
이때, 배열을 사용하는 것이 bottom-up 방식을 구현할 수 있을 것이라 생각했다. 이전 결과를 알고 있어야 하기 때문이다.
def fibonacci(num):
a,b = 0,1
for i in range(num):
a,b = b,a+b
return a
python의 특징을 잘 살린 풀이다. a와 b에 각각 숫자를 저장하는데, 이 연산을 동시에 진행한다.
이때, a에는 b의 값을 넣음으로서 다음 수로 넘어갈 준비를 함과 동시에 b에는 a + b의 값을 넣어 현재 수의 연산 결과를 저장할 수 있다.