반응형

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

 

9009번: 피보나치

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

www.acmicpc.net

 

해결 방법 : 피보나치 + 그리디

  • 필요한 만큼 피보나치 수열 get
  • 피보나치 수열을 역으로 탐색하며 n보다 작은 값, X가 나오면 리스트에 추가한 뒤, n -= X 
    • n이 0이 될 때까지 탐색 

 

import sys
input = sys.stdin.readline

def solution(n, fibos):
    answer = []
    for i in range(len(fibos)-1, 0, -1): # greedy
        if fibos[i] <= n: # n보다 작거나 같은 수 append
            answer.append(fibos[i])
            n -= fibos[i] # 더해진 fibos[i]만큼 차감
            if n == 0: break

    return answer[::-1]

def get_fibo(): # 필요한 만큼 fibo 수열 get
    answer = [0, 1]
    while answer[-1] <= 1000000000:
        answer.append(answer[-2] + answer[-1])

    return answer

if __name__ == '__main__':
    T = int(input())
    fibos = get_fibo()
    for _ in range(T):
        n = int(input())
        result = solution(n, fibos)
        print(*result)
반응형

+ Recent posts