알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 피보나치 함수(1003)

HRuler 2023. 1. 23. 15:55

1. 문제

https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# n : 테스트 케이스 수
n = int(input().strip())

# pibo_l : 피보나치 배열
pibo_l = [[1,0], [0,1]]

for i in range(n):
    cnt = int(input().strip())
    if len(pibo_l) <= cnt:
        for j in range(len(pibo_l), cnt+1):
            pibo_l.append([pibo_l[j-1][0] + pibo_l[j-2][0], pibo_l[j-1][1] + pibo_l[j-2][1]])
    print(pibo_l[cnt][0], pibo_l[cnt][1])

3. 후기

 - 피보나치 개념은 기존에 풀어보았던 문제들에 의해 이미 알고 있어 어렵지 않았다.

 다만 위 문제에서는 첫 인덱스인 0과 두번째 인덱스인 1의 호출 횟수를 세는 것인데, 다르게 말해서 테스트 케이스가 0과 1일 때 각각 [1, 0], [0, 1]을 가지고 2 이상의 테스트 케이스 부터는 0과 1일때의 호출 횟수를 각각 피보나치 개념을 적용하여 더해주면 되는 방식이기 때문에 어렵지 않게 해결할 수 있었다.