본문 바로가기

문제풀이

[백준] 10870번 파이썬 풀이

https://www.acmicpc.net/problem/10870

 

10870번: 피보나치 수 5

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

[문제]

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 
그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.
( 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597 )

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

[입력]

첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다.

[출력]

첫째 줄에 n번째 피보나치 수를 출력한다.

[예제 입력1]

10

[예제 출력1]

55

나의 풀이

def fibonacci(num):
    if num == 0:
        return 0
    elif num == 1 or num == 2:
        return 1
    else:
        return fibonacci(num-1) + fibonacci(num-2)
    
num = int(input())
print(fibonacci(num))

피보나치 수열이란?

출처) 위키백과

 피보나치수열은 첫째 및 둘째 항이 1이며, 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다.

편의상 0번째 항을 0으로 두기도 한다.

0번째 항부터 시작할 경우 점화식

그래서 피보나치 수를 0번째 항부터 시작할 경우 처음 몇 항은 다음과 같다

 

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987....

 

피보나치 수열을 구하는 방법

 ㅇ 함수를 사용한 방식

 

def fibonacci(num):
    x = y = 1
    if num == 0:
        return 0
    elif num == 1 or num == 2:
        return 1
    
    for i in range(1, num):
        x = y
        y = x+y
    return x
    
print([fibonacci(num) for num in range(1, 10)])
[결과]
[1, 1, 2, 3, 5, 8, 13, 21, 34]

 

 ㅇ 재귀 함수(Recursive)를 사용한 방식

 

def fibonacci(num):
    if num == 0:
        return 0
    elif num == 1 or num == 2:
        return 1
    else:
        return fibonacci(num-1) + fibonacci(num-2)
    
print(fibonacci(10))
[결과]
55

 

 ㅇ 람다를 사용한 방식

 

fib = lambda n: 1 if n<=2 else fib(n-1) + fib(n-2)

print(fib(10))
[결과]
55
---------------------------------------------------
fib = lambda n, a=0, b=1 : a if n<=0 else fib(n-1,b, a+b)

print(fib(10))
[결과]
55

람다를 사용한 방식은 한 줄 코딩을 할 때 자주 사용한다고 합니다. (아직 내 머리로 이해하기에는 벅찬..)

'문제풀이' 카테고리의 다른 글

[백준] 1159번 파이썬 풀이  (0) 2022.03.23
[백준] 1267번 파이썬 풀이  (0) 2022.03.23
[백준] 1100번 파이썬 풀이  (0) 2022.03.20
[백준] 1009번 파이썬 풀이  (0) 2022.03.20
[백준] 1076번 파이썬 풀이  (0) 2022.03.16