백준 문제풀이

[백준 1003번 문제] 피보나치 함수

eunda_coding 2022. 5. 9. 17:01

이 문제는 피보나치 함수를 이용해서 계산을 할 때 0과 1을 몇번 리턴하는지 카운트하는 문제이다.

 

 

처음에는 단순히 피보나치 함수를 만들고 그 안에서 0과 1을 카운트 하도록 구현하였다.

def fibo(n):
    if n == 0:
        # print("0")
        global cnt_zero
        cnt_zero += 1
        return 0
    elif n == 1:
        # print("1")
        global cnt_one
        cnt_one += 1
        return 1
    else:
        return fibo(n-1) + fibo(n-2)

cnt_zero = 0
cnt_one = 0
num = int(input(""))

for i in range(num):
    n = int(input(""))
    fibo(n)
    print(cnt_zero, cnt_one)
    cnt_zero = 0
    cnt_one = 0

위에 처럼 코딩을 했더니 시간초과 에러가 떠서 다른 방식을 생각해 보았다.

 

def fibo(n):
    if len(zero) <= n:
        for i in range(len(zero), n+1):
            zero.append(zero[i-1] + zero[i-2])
            one.append(one[i-1] + one[i-2])
    print(zero[n], one[n])

zero = [1,0,1]
one = [0,1,1]
num = int(input())

for i in range(num):
    n = int(input(""))
    fibo(n)

배열을 이용해서 0과 1이 호출된 횟수를 적은 배열을 선언한 뒤에 for문을 이용해서 계산한 횟수를 배열에 append하는 방식으로 구현하였더니 성공했다. 코테 문제를 풀 때 푸는 것도 중요하지만 시간초과가 되지 않도록 구현하는것도 중요한 문제인거 같다.