알고리즘 문제풀이

피보나치[백준 9009]

wiojfe 2024. 5. 24. 11:35

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

 

 

최소의 숫자 개수로 입력받은 수를 만들어야 하니 가장 큰 수부터 배열을 확인하며 내려온다. 

n = int(input())
fibo = [0]*(50)
fibo[1] = 1 
fibo[2] = 1
for i in range(3, 50):    fibo[i] = fibo[i-1]+fibo[i-2]

def find(k):
    arr = []
    while k>0 : 
        i= 0 
        for i in range(50):
            if fibo[i]==k :
                arr.append(fibo[i])
                return arr 
            elif fibo[i] >k :
                arr.append(fibo[i-1])
                k-= fibo[i-1] 
                break
    return arr 
for _ in range(n):
    k = int(input())
    ans = find(k)
    ans.sort() 
    print(' '.join(map(str, ans)))
# print(ans)