알고리즘문제
백준 1003번: 피보나치 함수
5witch
2022. 4. 30. 22:28
https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
주어진 N에 대해 피보나치함수를 적용했을때,
0이 출력되는 횟수와 1이 출력되는 횟수를 출력하는 문제임
먼저 피보나치 수를 알아야함
1 + 1 = 2 , 2(현재 항) + 1(이전 항) = 3, 3(현재 항) + 2(이전 항) = 5 ...... 이런식이다
피보나치 함수는 L 이라는 list가 피보나치 수를 담는 리스트라고 할때
L = []
점화식은
L[추가될 항] = L[현재 항] + L[이전 항] 이 된다.
이 문제에서는 0과 1을 출력하는 패턴이 피보나치 수의 패턴이다.
0을 출력을 담는 리스트를 L0,
1의 출력을 담는 리스트를 L1이라고 가정하고
만약 입력된 N이 0이면, 0이 1개이므로 L0[0]은 1이고
N이 1이면, 0은 0개, 1은 1개니까
L0[1] = 0, L1[1] = 1이 된다.
아까 점화식이 L[추가될 항] = L[현재 항] + L[이전 항] 이였으니
N이 0, 1, 2 번째일경우 미리 리스트에 담아준다
L0 = [1, 0, 1]
L1 = [0, 1, 1]
import sys
input = sys.stdin.readline
def fibonacci(N):
#0 출력을 담는 리스트
L0 = [1,0,1]
#1 출력을 담는 리스트
L1 = [0,1,1]
if N > 2:
for i in range(2, N):
# 0과1을 출력하는 list에 각각 (현재항+이전항)을 추가해준다 (fibonacci)
L0.append(L0[i] + L0[i-1])
L1.append(L1[i] + L1[i-1])
# N번째네 0 과 1이 출력되는 횟수를 출력해줌
print(f'{L0[N]} {L1[N]}')
T = int(input())
for _ in range(T):
N = int(input())
fibonacci(N)