알고리즘/BOJ

[BOJ 9009, Python 3] 피보나치

70825 2021. 8. 7. 20:25
반응형

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

 

9009번: 피보나치

입력 데이터는 표준입력을 사용한다. 입력은 T 개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 테스트 데이터의 수를 나타내는 정수 T 가 주어진다. 각 테스트 데이터에는 하나의 정수 n

www.acmicpc.net

 

풀이

N보다 작거나 같은 가장 큰 피보나치 수를 계속 빼주면 된다. 

 

 

N보다 작거나 같은 가장 큰 피보나치 수를 빼지 않는다고 해보자

만약 pibo[i]값을 빼야하는데 다른 값을 빼야한다면 pibo[i] = pibo[i-1]+pibo[i-2]이므로 피보나치 수 1개로 빼야할 것을 2개로 빼야해서 최소 개수를 구하라는 문제의 답이 될 수 없다.

그리고 만약 N = 21이라면 21 = 13 + 8로 구할 수 있지만, 20= 8 + 5 + 3 + 2 + 1 + 1로 서로 다른 피보나치 수들의 합으로 답을 구할 수 없다는 문제점도 생긴다.

 

 

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
for _ in range(int(input())):
    n = int(input())
    ans = []
    while n != 0:
        arr = [01]
        while arr[1<= n:
            arr = arr[1], sum(arr)
        if arr[1== n:
            ans.append(arr[1])
            n -= arr[1]
        else:
            ans.append(arr[0])
            n -= arr[0]
    print(' '.join(map(str, sorted(ans))))
cs
반응형