컴퓨터 프로그래밍/알고리즘
프로그래머스_피보나치수열
깝돌이
2020. 6. 1. 23:00
https://programmers.co.kr/learn/courses/30/lessons/12945?language=java
코딩테스트 연습 - 피보나치 수
피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) =
programmers.co.kr
<내 풀이>
class Solution {
public int solution(int n) {
if(n==0){
return 0;
}
if(n==1){
return 1;
}
return (solution(n-1)+solution(n-2))%1234567;
}
}
재귀 함수로 풀었더니, 시간초과 뜹니다.
class Solution {
public int solution(int n) {
int[] fn = new int[n+1];
fn[0]=0;
fn[1]=1;
for(int i=2; i<=n; i++) {
fn[i]=fn[i-1]+fn[i-2];
}
return fn[n]%1234567;
}
}
}
근데, 위와같이 했는데, 안됐습니다. 제가 문제를 잘 못 이해한건지... n째의 피보나치 수열을 구하고 그거의 나머지를 구하라는 것인 것 같았는데, 답이 안나옵니다.
package algorithm_2;
public class l01 {
static int solution(int n) {
int[] fn = new int[n+1];
fn[0]=0;
fn[1]=1;
for(int i=2; i<=n; i++) {
fn[i]=(fn[i-1]%1234567+fn[i-2]%1234567)%1234567;
}
return fn[n];
}
}
이렇게 되니까 답이 나옵니다. 이러면, 나머지의 합이 되게 되는데, 이게 문제를 낸 의도가 맞는지 궁금합니다.