컴퓨터 프로그래밍/알고리즘

프로그래머스_피보나치수열

깝돌이 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];

	   }
}

 

이렇게 되니까 답이 나옵니다. 이러면, 나머지의 합이 되게 되는데, 이게 문제를 낸 의도가 맞는지 궁금합니다.