1 분 소요

1. 문제

[level 2] 피보나치 수 - 12945

문제 링크

성능 요약

메모리: 13.8 MB, 시간: 21.19 ms

구분

코딩테스트 연습 > 연습문제

채점결과


정확성: 100.0
합계: 100.0 / 100.0

문제 설명

피보나치 수는 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은 2 이상 100,000 이하인 자연수입니다.
입출력 예
n return
3 2
5 5
입출력 예 설명

피보나치수는 0번째부터 0, 1, 1, 2, 3, 5, ... 와 같이 이어집니다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

2. 해결방법 시간복잡도

  1. 단순 코딩 O(N)
  2. 더 쉽게 O(N)

3. 문제 해결 및 코드


  • 주석을 참고하면서 이해를 돕습니다.

4. 알고리즘 및 해설

  1. 해당 문제의 경우 흔히 피보나치 수열이라고 불리는 문제이다.
    • 재귀문을 풀때 가장 많이 언급되는 문제이지만 해당 문제에서는 재귀문을 사용하게 되면 런타임 에러가 발생한다.(이는 시간초과 에러이다.)
  2. 그래서 반복문을 통해서 해당 문제를 해결해야한다.
    • 반복문을 통해 해당 값까지 만약 값이 0또는 1이라면 결과 리스트에 값을 넣어준다.
    • 이후 f라는 변수 즉 피보나치 수는 결과값에 들어간 마지막 두 값을 더해서 넣어준다.
      • 이때 1234567이라는 값을 나누어준 나머지를 리턴하라고 문제에 명시되어 있으므로 1234567를 나눠서 결과값에 넣어준다.
  3. 최종적으로 모든 수가 계산된 결과값의 마지막 값을 출력한다.

5. 더 쉽게

def solution(num):
    a,b = 0,1
    for i in range(num):
        a,b = b,a+b
    return a % 1234567
  • 피보나치 수를 구현하는 방법중에서 하나인 a와 b 0과 1을 만든 이후 반복문을 통해 값을 더해가는 방식이다.
  • 위의 코드보다 좀 더 간결하고 빠르게 문제를 해결할 수 있다는 것이 좋다.