문제 링크입니다: https://www.codewars.com/kata/556e0fccc392c527f20000c5/train/cpp
피보나치 수열의 원리만 안다면 쉽게 풀 수 있습니다.
/*
피보나치 수열은 F(n)=F(n-1)+F(n-2) 이런식으로 구한다.
조금 더 확장해보자.
Quadribonacci는 F(n)=F(n-1)+F(n-2)+F(n-3)+F(n-4)이다.
그렇다면 Xbonacci는 F(n)=F(n-1)+...+F(n-x)이다.
Xbonacci를 구하는 프로그램을 작성하시오
*/
#include <iostream>
#include <vector>
using namespace std;
std::vector<int> xbonacci(std::vector<int> signature, int n)
{
int length = signature.size();
if (n < length) //출력하고자 하는 길이가 배열의 크기보다 작다면
while (signature.size() != n)
signature.pop_back();
for (int i = length; i < n; i++) //i번째 index 계산
{
int sum = 0;
for (int j = 1; j <= length; j++)
sum += signature[i-j];
signature.push_back(sum);
}
return signature;
}
ostream &operator<<(ostream &os, std::vector<int> signature) //출력 연산자
{
for (int i = 0; i < signature.size(); i++)
os << signature[i] << " ";
os << endl;
return os;
}
int main(void)
{
std::vector<int> signature = { 0, 1 };
cout << xbonacci(signature, 10) << endl;
signature = { 1, 1 };
cout << xbonacci(signature, 10) << endl;
signature = { 0, 0, 0, 0, 1 };
cout << xbonacci(signature, 10) << endl;
signature = { 1, 0, 0, 0, 0, 0, 1 };
cout << xbonacci(signature, 10) << endl;
signature = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
cout << xbonacci(signature, 20) << endl;
signature = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
cout << xbonacci(signature, 9) << endl;
signature = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
cout << xbonacci(signature, 0) << endl;
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > codewars' 카테고리의 다른 글
codewars: Simple Encryption #1 - Alternating Split (0) | 2018.01.30 |
---|---|
codewars: Build a pile of Cubes (0) | 2018.01.29 |
codewars: Consecutive strings (0) | 2018.01.29 |
codewars: A Rule of Divisibility by 13 (0) | 2018.01.29 |
codewars: Equal Sides Of An Array (0) | 2018.01.28 |