coding test - python/Programmers
Programmers / 피보나치 수 / Python 파이썬
sillon
2022. 4. 30. 17:22
728x90
반응형
*문제 출처는 프로그래머스에 있습니다.
문제 제목: 피보나치 수 (2단계)
문제 사이트: https://programmers.co.kr/learn/courses/30/lessons/12945
나의 풀이 1 - 재귀함수 이용 (오답 + 런타임에러)
def fibo(n):
if n <=1 :
return n
return solution(n-1) + solution(n-2)
def solution(x):
return fibo(x) % 1234567
재귀함수를 이용하여 풀었다.
나의 풀이 2 - for문 이용
def fibo(n):
fibonacci = [0,1]
for i in range(2,n + 1):
num = fibonacci[i-1] + fibonacci[i-2]
fibonacci.append(num)
return max(fibonacci)
def solution(x):
return fibo(x) % 1234567
재귀함수는 아무래도 자기자신을 계속해서 호출하기때문에 런타임에러가 나는 것 같다.
fibo 함수에서 for문으로 반복하면서 피보나치 수열 알고리즘에 맞게 fibonacci 리스트에 저장하고,
for문을 다 돌았으면 fibonacci 수열에서 가장 큰 값을 반환한다.
그 다음 solution 함수에서 fibo함수에서 나온 값 (max(fibonacci))를 1234567로 나눈 나머지를 반환한다.(문제 조건)
※ 알아야 할 것
피보나치 수열
: 재귀함수의 시간복잡도가 더 나쁘다.
(이유: 재귀함수는 다른 함수 호출 할 때마다 2 갈래로 나뉨O(2^N).
반면, 반복문은 기존값에 누적해서 반복적으로 더하기 때문에 O(N))
- 출처 https://velog.io/@tiana/%EB%B0%98%EB%B3%B5%EB%AC%B8-vs-%EC%9E%AC%EA%B7%80%ED%95%A8%EC%88%98
728x90
반응형