알고리즘/백준 문제풀이
[백준] 1002 피보나치 함수 파이썬 풀이 (동적계획법)
자바칩 프라푸치노
2021. 6. 24. 14:15
문제
- 피보나치 함수를 구할때 0과 1이 몇 번 호출되는지 구하여라
문제 풀이
- fn_2 에 fibonacci(n-2)의 0의 개수와 1의 개수를 저장한다.
- fn_1에 fibonacci(n-1)의 0의 개수와 1의 개수를 저장한다.
- fn에 fibonacci(n)의 0의 개수와 1의 개수를 저장한다.
- fn의 0의 개수는 fn_1의 0의 개수와 fn_2의 0의 개수를 더한 것이다.
- fn의 1의 개수는 fn_1의 1의 개수와 fn_2의 1의 개수를 더한 것이다.
- fn에 저장해주고 나서 fn_1에 있던 값을 fn_2로 옮기고 fn에 있던 값을 fn_1로 옮긴다.
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
num = int(input())
for i in range(num):
number = int(input())
fn_2 = [0,0] #f(n-2) 저장 0 인덱스의 값은 0이 나온 횟수 1인덱스의 값은 1이 나온 횟수
fn_1 = [0,0] #f(n-1) 저장
fn = [0,0] #fn 저장
if number == 0:
print('1 0')
elif number == 1:
print('0 1')
else:
for j in range(number+1):
if j == 0:
fn_2 = [1,0]
elif j == 1:
fn_1 = [0,1]
else:
fn[0] = fn_2[0] + fn_1[0]
fn[1] = fn_2[1] + fn_1[1]
fn_2[0],fn_2[1] = fn_1[0],fn_1[1]
fn_1[0],fn_1[1] = fn[0],fn[1]
print(fn[0], fn[1])
|
cs |
다른 사람의 풀이
t = int(input())
for i in range(t):
n = int(input())
zero = 1
one = 0
tmp = 0
for _ in range(n):
tmp = one
one = one + zero
zero = tmp
print(zero, one)
728x90