피보나치 함수 [ Python ] [ 백준 : 1003 ]

2023. 5. 30. 18:43알고리즘/백준


풀이 및 회고

 

처음은 보여지는 코드 그대로 파이썬으로 옮겨서 적었고 제출했다.

그러나 바로 시간초과 오류가 발생하였고 코드를 줄여야만 했는데 피보나치 수열을 모르는 나로써는 이는 너무 어려운일이었다.

30~40 분 동안 피보나치 수열이 무엇인지 찾아보고 줄일 수 있는 방법을 찾아보는데 실패했다.

매니저님의 수학관련 문제는 너무 시간을 많이 쏟지 말라고 들었다.

수학 공식을 모르면 풀 수 없기 때문에 답을 보고 학습을 하는 것을 추천하셨다.

우리는 답을 보았고 본 다음 이해하려하며 문제를 보고 적는 것이 아닌 이해한 바탕으로 문제를 적고 풀었다.

약간 오픈북느낌이라 조금 찝찝하긴 하다. 공부가 더 필요하다 

# 피보나치 함수

# before==================================

# zeroCount = 0
# oneCount = 0
# def fibonacci(n):
#     global zeroCount
#     global oneCount
    
#     if n == 0:
#         zeroCount += 1
#         return zeroCount
#     elif n == 1:
#         oneCount += 1
#         return oneCount
#     else:
#         return fibonacci(n - 1) + fibonacci(n - 2)

# m = int(input())
# for i in range(m):
#     n = int(input())
#     fibonacci(n)
#     print(zeroCount, oneCount)
#     zeroCount, oneCount = 0, 0

#__________ မင်္ဂလာပါ______밍그라바_______

# 0의 갯수 = 이전 1의 갯수, 1의 갯수 = 이전 0+이전1 갯수
t = int(input())

for _ in range(t):
    zeroCount = [1, 0, 1]
    oneCount = [0, 1, 1]
    n = int(input())
    
    for j in range(3, n + 1):
        oneCount.append(oneCount[j-1] + oneCount[j-2])
        zeroCount.append(zeroCount[j-1] + zeroCount[j-2])
        
    print(zeroCount[n], oneCount[n])




# 0     1 0     
# 1     0 1
# 2     1 1    
# 3     1 2      
# 4     2 3  
# 5     3 4  
# 6     5 7 
# 7     8 13
# 8    13 20
# 9    21 33