반응형
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)
반응형
'IT study > 알고리즘 문제 풀이' 카테고리의 다른 글
백준 1799 : 비숍 (0) | 2021.09.16 |
---|---|
백준 13460 : 구슬 탈출 2 (0) | 2021.09.05 |
백준 7507 : 올림픽 게임 (0) | 2021.08.19 |
백준 1003 : 피보나치 함수 (백준 4150 : 피보나치 수) (0) | 2021.08.17 |
백준 16156 : 장애물 달리기 (1) | 2021.08.16 |