본문 바로가기

알고리즘 공부/프로그래머스

프로그래머스 Level 2 - 연습문제 - 피보나치 수

  • 피보나치 수
문제 설명

피보나치 수는 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) = 2 + 3 = 5

와 같이 이어집니다.

2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주세요.

제한 사항
  • n은 2 이상 100,000 이하인 자연수입니다.
입출력 예nreturn
3 2
5 5
입출력 예 설명

피보나치수는 0번째부터 0, 1, 1, 2, 3, 5, ... 와 같이 이어집니다.

 


피보나치 문제이기에 재귀함수로

(n-1)  + (n-2) 로 풀었더니 시간초과가 나서 질문을 확인하였고

재귀 함수 사용 시 스택초과 가 난다는 내용을 확인하고 for문으로 구현하였습니다.

 

1. answer[1] = 1 , answer[2] = 1 으로 초기화

2. for(int i=3; i<=n; i++) 동안 answer[n] = answer[n-1] + answer[n-2] 으로 계산

-글쓰다 확인한 내용 for문 i 초기값을 2로 돌렸는데도 통과가 됨... 

 

class Solution {
    
    public int solution(int n) {

        int[] answer = new int [n+1];
        answer[1] = 1;
        answer[2] = 1;
        
        for(int i=3; i<=n; i++){	// int i=2 부터 돌려도 통과 됨..
            answer[i] = ( answer[i-1] + answer[i-2] ) % 1234567;
        }
       
        return answer[n];
        
    }
}