프로그래머스/2레벨
피보나치 수/C++
Koalitsiya
2023. 1. 6. 14:53
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
아래처럼 재귀호출을 사용했더니 시간 초과가 떠서 배열로 풀었다.
#include <string>
#include <vector>
using namespace std;
int Fibonacci(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else return Fibonacci(n - 1) + Fibonacci(n - 2) % 1234567;
}
int solution(int n) {
int answer = 0;
answer = Fibonacci(n);
return answer;
}
풀이 방법
1. int형 벡터 컨테이너 Fibonacci를 선언한다.
2. n은 2 이상인 자연수이므로 0, 1 인덱스에 각각 F(0), F(1)에 해당하는 값을 넣어준다.
3. 이후 2부터 n까지 F(i - 1) + F(i - 2) % 1234567을 담는다. (오버플로우 방지)
4. n번째 피보니치 수를 1234567로 나눈 나머지를 리턴
#include <string>
#include <vector>
using namespace std;
int solution(int n) {
int answer = 0;
vector<int> Fibonacci;
Fibonacci.push_back(0);
Fibonacci.push_back(1);
for(int i = 2; i <= n; i++){
Fibonacci.push_back((Fibonacci[i - 1] + Fibonacci[i - 2]) % 1234567);
}
answer = Fibonacci[n];
return answer;
}