BOJ 9009번: 피보나치

2022. 1. 12. 14:51· 알고리즘💻/그리디

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

 

9009번: 피보나치

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

www.acmicpc.net

하나의 양의 정수가 주어질 때, 피보나치 수들의 합이 주어진 정수와 같게 되는 최소 개수의 서로 다른 피보나치 수들을 구하라. 이때 피보나치 수는 증가하는 순서대로 출력

 

그리디 알고리즘이라는 것을 생각하고 규칙을 찾으면 간단하게 풀 수 있는 문제였다. 처음에는 피보나치라고 해서 dp를 사용해야 하나 했는데.. 다시 생각해보니 그럴 필요가 전혀 없었다.

피보나치 수를 생각해보면 f(n+1) = f(n) + f(n-1) 이기 때문에 결국 모든 피보나치 수는 피보나치 수의 합으로 이루어져 있는 것이다. 문제에서 피보나치 수의 합으로 표현할 수 없는 정수는 주어지지 않기 때문에 모두 피보나치 수의 합으로 표현할 수 있다고 가정하면, 주어진 정수 N보다 작거나 같은 수 중 제일 큰 수를 차례대로 빼면서 풀어나가면 답을 구할 수 있다.

 

피보나치 배열을 f[44]까지 구한 이유는 f[45]부터는 주어진 정수의 범위를 넘어가기 때문이다.

 

import sys
input = sys.stdin.readline

fib = [-1 for _ in range(45)]
fib[0] = 0
fib[1] = 1
for i in range(2, 45):
    fib[i] = fib[i-1] + fib[i-2]

T = int(input())
for _ in range(T):
    n = int(input())
    ans = []
    cnt = 0
    for i in range(44, -1, -1):
        if (fib[i] <= n):
            n -= fib[i]
            ans.append(fib[i])
            cnt += 1
            
        if (n==0):
            break
    for i in range(cnt-1, -1, -1):
        print(ans[i], end=" ")
    print()
저작자표시 (새창열림)

'알고리즘💻 > 그리디' 카테고리의 다른 글

BOJ 1439번: 뒤집기  (1) 2023.09.14
BOJ 11501번: 주식  (0) 2023.09.13
BOJ 18921번: Cost of Subtree  (0) 2021.08.18
BOJ 2450번: 모양 정돈  (0) 2021.08.04
BOJ 2457번: 공주님의 정원  (0) 2021.08.04
'알고리즘💻/그리디' 카테고리의 다른 글
  • BOJ 1439번: 뒤집기
  • BOJ 11501번: 주식
  • BOJ 18921번: Cost of Subtree
  • BOJ 2450번: 모양 정돈
호프
호프
호프
Untitled
호프
전체
오늘
어제
  • 분류 전체보기 (341)
    • 오류😬 (4)
    • 스터디📖 (96)
      • 웹 개발 기초 (8)
      • Spring (20)
      • ML, DL (30)
      • Node.js (22)
      • React (0)
      • 블록체인 (12)
      • Go (3)
      • Javascript (1)
    • 알고리즘💻 (153)
      • 그리디 (23)
      • Bruteforce&Backtracking (16)
      • DP (17)
      • 이분탐색&정렬&분할정복 (17)
      • 누적합&투포인터 (6)
      • 스택&큐&덱 (19)
      • 그래프(DFS&BFS) (19)
      • 트리 (7)
      • 우선순위큐&다익스트라 (11)
      • 벨만포드&플로이드와샬 (8)
      • map&set&number theory (5)
      • 기타 (5)
    • 프로젝트 (3)
      • 캡스톤 디자인 프로젝트 (3)
    • 블록체인🔗 (3)
      • Solana (2)
      • 개발 (0)
      • Harmony (1)
    • ASC (6)
    • CS (73)
      • 데이터베이스 (12)
      • 클라우드컴퓨팅 (21)
      • 운영체제 (11)
      • 컴퓨터네트워크 (14)
      • 블록체인응용 (15)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복습

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
호프
BOJ 9009번: 피보나치
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.