[파이썬][프로그래머스] 피보나치 수
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. 해결방법 시간복잡도
- 단순 코딩 O(N)
- 더 쉽게 O(N)
3. 문제 해결 및 코드
-
주석을 참고하면서 이해를 돕습니다.
4. 알고리즘 및 해설
- 해당 문제의 경우 흔히 피보나치 수열이라고 불리는 문제이다.
- 재귀문을 풀때 가장 많이 언급되는 문제이지만 해당 문제에서는 재귀문을 사용하게 되면 런타임 에러가 발생한다.(이는 시간초과 에러이다.)
- 그래서 반복문을 통해서 해당 문제를 해결해야한다.
- 반복문을 통해 해당 값까지 만약 값이 0또는 1이라면 결과 리스트에 값을 넣어준다.
- 이후 f라는 변수 즉 피보나치 수는 결과값에 들어간 마지막 두 값을 더해서 넣어준다.
- 이때
1234567
이라는 값을 나누어준 나머지를 리턴하라고 문제에 명시되어 있으므로1234567
를 나눠서 결과값에 넣어준다.
- 이때
- 최종적으로 모든 수가 계산된 결과값의 마지막 값을 출력한다.
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을 만든 이후 반복문을 통해 값을 더해가는 방식이다.
- 위의 코드보다 좀 더 간결하고 빠르게 문제를 해결할 수 있다는 것이 좋다.