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번째 피보나치 수를 출력한다.
코드 정답
import sys
input = sys.stdin.readline
def fibonacci(n):
if n < 2:
return(n)
return (fibonacci(n-1) + fibonacci(n-2))
n = int(input())
print(fibonacci(n))
풀이
1~2행 : 일반적으로 input 을 사용하게 된다면 시간 초과가 나올 수 있다. 그렇기 때문에 input 과 같으면서도 빠른 sys.stdin.readline 을 사용하기 위해 import sys 란 헤더를 선언해주었고 input 에 sys.stdin.readline 을 대입하여 input 을 sys.stdin.readline 처럼 사용 할 수 있게끔 된다.
import sys
input = sys.stdin.readline
4~7행 : fibonacci 란 함수를 선언하여 받아온 인수 값을 n 이란 변수에 저장한다. 만약 n 이 2보다 작으면 그 값 그대로 반환시키고, 아니라면 7행에 존재하는 재귀함수를 이용해 fibonacci 의 값을 전부 구하게 되고, 마지막 더해지는 값부터 처음 시작된 재귀 함수에 까지 돌아오게 되어 완성된 값을 반환시킨다.
def fibonacci(n):
if n < 2:
return(n)
return (fibonacci(n-1) + fibonacci(n-2))
9~10행 : 입력값을 하나 받아 변수 n 에 저장한다. 이후 fibonacci() 함수에 변수 n 을 넘겨주며, return 되어 반환된 값을 출력한다.
n = int(input())
print(fibonacci(n))
'BaekJoon > 단계별로 풀어보기' 카테고리의 다른 글
[백준] 재귀 - 25501번 (Python) (0) | 2023.02.23 |
---|---|
[백준] 재귀 - 10872번 (Python) (0) | 2023.02.20 |
[백준] 정렬 - 18870번 (Python) (0) | 2023.02.19 |
[백준] 정렬 - 10814번 (Python) (0) | 2023.02.18 |
[백준] 정렬 - 1181번 (Python) (1) | 2023.02.14 |