피보나치 수

신연우·2021년 2월 14일
0

알고리즘

목록 보기
36/58
post-thumbnail

프로그래머스 - 피보나치 수

문제 설명

피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다.

예를들어

  • F(2) = F(0) + F(1) = 0 + 1 = 1
  • F(3) = F(1) + F(2) = 1 + 1 = 2
  • F(4) = F(2) + F(3) = 1 + 2 = 3
  • F(5) = F(3) + F(4) = 2 + 3 = 5

와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

제한 사항

  • n은 1이상, 100000이하인 자연수입니다.

입출력 예

nreturn
32
55

풀이

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의 값을 넣어 현재 수의 연산 결과를 저장할 수 있다.

profile
남들과 함께하기 위해서는 혼자 나아갈 수 있는 힘이 있어야 한다.

0개의 댓글