백준-1003 피보나치 함수(피보나치 반복문으로 구현하기, dp)자료구조+알고리즘2021. 6. 8. 19:11
Table of Contents
https://www.acmicpc.net/problem/1003
문제
fibonacci(3)을 호출하면 다음과 같은 일이 일어난다.
- fibonacci(3)은 fibonacci(2)와 fibonacci(1) (첫 번째 호출)을 호출한다.
- fibonacci(2)는 fibonacci(1) (두 번째 호출)과 fibonacci(0)을 호출한다.
- 두 번째 호출한 fibonacci(1)은 1을 출력하고 1을 리턴한다.
- fibonacci(0)은 0을 출력하고, 0을 리턴한다.
- fibonacci(2)는 fibonacci(1)과 fibonacci(0)의 결과를 얻고, 1을 리턴한다.
- 첫 번째 호출한 fibonacci(1)은 1을 출력하고, 1을 리턴한다.
- fibonacci(3)은 fibonacci(2)와 fibonacci(1)의 결과를 얻고, 2를 리턴한다.
1은 2번 출력되고, 0은 1번 출력된다. N이 주어졌을 때, fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.
풀이
재귀함수를 이용해서 문제를 해결하려고 하면 쉽지만, 시간초과가 발생한다. 그래서 시간 n만큼 걸리는 반복문을 이용해서 문제를 해결해보자!
우선 아래는 피보나치 함수를 반복문으로 구현한 경우이다.
def solution(n):
a, b = 1, 1
if n == 1 or n == 2:
return 1
for i in range(1, n):
a, b = b, a+b
return a
이 문제에서 0 과 1또한 피보나치 함수를 따른다!
import sys
def fib(n):
fib0, fib1 = [0] * 41, [0] * 41
fib0[0], fib0[1], fib1[0], fib1[1] = 1, 0, 0, 1
for i in range(2, n + 1):
fib0[i], fib1[i] = fib0[i - 1] + fib0[i - 2], fib1[i - 1] + fib1[i - 2]
print("{0} {1}".format(fib0[n], fib1[n]))
N = int(sys.stdin.readline())
for i in range(N):
n = int(sys.stdin.readline())
fib(n)
'자료구조+알고리즘' 카테고리의 다른 글
백준-1260번 DFS와 BFS (extendleft) (0) | 2021.06.09 |
---|---|
BFS, DFS (0) | 2021.06.09 |
백준-2805 나무자르기 (이분탐색) (0) | 2021.05.24 |
백준-나무자르기/프로그래머스-입국심사(이분탐색) (0) | 2021.05.23 |
백준-2164 카드게임2 (deque) (0) | 2021.05.22 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!