Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 카프카
- aws
- 백준
- DFS
- springboot
- 스프링부트
- Kafka
- 백트래킹
- Apache Kafka
- 알고리즘
- Spring Data JPA
- Docker
- JPA
- Spring
- 자료구조
- 쿠버네티스
- VPC
- 인천여행
- 프로그래밍문제
- 스프링 부트
- 클라우드
- 클라우드 컴퓨팅
- 월미도
- 코드업
- Elasticsearch
- gcp
- 오일러프로젝트
- 로드밸런서
- Spring Boot
- 스프링
Archives
- Today
- Total
GW LABS
[오일러 프로젝트 25] 피보나치 수열에서 처음으로 1000자리가 되는 항은 몇 번째? 본문
Algorithm & DataStructure
[오일러 프로젝트 25] 피보나치 수열에서 처음으로 1000자리가 되는 항은 몇 번째?
GeonWoo Kim 2020. 6. 18. 09:02피보나치 수열을 구할 때 보통 재귀호출과 동적계획법 등을 통해서 구하는 문제들이 많다. 그러나 이 문제는 1000자리 까지 구해야하기 때문에 unsigned long long 자료형으로도 표현할 수 없다! 이 문제도 마찬가지로 동적배열을 통해서 숫자를 표현해야한다.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> fibo;
fibo.push_back(1);
vector<int> num;
num.push_back(1);
vector<int> tmp;
unsigned int idx = 2;
while (true) {
tmp = fibo;
for (int i = 0; i < num.size(); i++) {
fibo[i] += num[i];
}
for (int i = 0; i < fibo.size(); i++) {
if (fibo[i] >= 10) {
int carry = fibo[i] / 10;
fibo[i] %= 10;
if (i == fibo.size() - 1) {
fibo.push_back(carry);
}
else {
fibo[i+1] += carry;
}
}
}
idx++;
if (fibo.size() >= 1000) break;
num = tmp;
}
cout << "index : " << idx << endl;
for (int num : fibo) cout << num;
cout << endl;
}
vector를 이용해서 실행시간이 느릴 것으로 예상했지만 생각보다 빠르게 결과를 얻어낼 수 있었다. ubuntu time 명령어로 측정해봐도 0.1초 이내에 답을 구해낼 수 있다.
'Algorithm & DataStructure' 카테고리의 다른 글
[코드업 3701] 파스칼의 삼각형 (0) | 2020.07.01 |
---|---|
[오일러 프로젝트 28] 1001×1001 나선모양 행렬에서 대각선 원소의 합은? (0) | 2020.06.28 |
[오일러 프로젝트 23] 두 초과수의 합으로 나타낼 수 없는 모든 양의 정수의 합은? (0) | 2020.06.17 |
[코드업 2640] n의 k승 구하기 2 (0) | 2020.06.16 |
[오일러 프로젝트 21] 10000 이하 모든 친화수(우애수)의 합은? (0) | 2020.06.16 |
Comments