문제
- 피보나치 함수를 구할때 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
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 11047 동전0 파이썬 풀이 (그리디) (0) | 2021.06.24 |
---|---|
[백준] 1541 잃어버린 괄호 파이썬 풀이 (그리디) (0) | 2021.06.24 |
[백준] 2231 분해합 파이썬 풀이 (브루트포스) (0) | 2021.06.24 |
[백준] 2798 블랙잭 파이썬 풀이 (브루트포스) (0) | 2021.06.24 |
[백준] 1002 터렛 파이썬 풀이 (기본 수학) (0) | 2021.06.24 |