본문 바로가기
Algorithm/Programmers

피보나치 수

by 동그란 혜주 2019. 6. 4.

· 문제 설명

피보나치 수는 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은 1이상, 100000이하인 자연수입니다.

 

· 입출력 예

n return
3 2
5 5

 

· 입출력 예 설명

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


· Thinking 1

피보나치는 정처기 실기에서 몇 번을 풀었음 ㅎㅎ;
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)

class Solution {
  public int solution(int n) {
      int answer = 0;
      
      if (n == 0) {
           answer += 0;
      } else if (n ==1) {
          answer += 1;
      } else {
          answer += solution(n-1) + solution(n-2);
      }

      return answer;
  }
}

테스트케이스 7부터 시간초과..!

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

이걸 고려하지 않음..!


· Thinking 2

class Solution {
  public int solution(int n) {
      int answer = 0;
      
      if (n == 0) {
           answer += 0;
      } else if (n ==1) {
          answer += 1;
      } else {
          answer += (solution(n-1) + solution(n-2)) % 1234567;
      }

      return answer;
  }
}

역시 아직도 시간초과..ㅠ


· 완성 코드

class Solution {
  public int solution(int n) {
      int[] num = new int[n+1];
      num[0] = 0;
      num[1] = 1;
      num[2] = 1;
      
      for (int i = 3; i <= n; i++) {
          num[i] = (num[i-1] + num[i-2]) % 1234567;
      }
      
      return num[n];
  }
}

질문하기를 살짝 참고했다... 기분이 좋지 않아....


· 문제 출처

https://programmers.co.kr/learn/courses/30/lessons/12945

 

알고리즘 연습 - 피보나치 수 | 프로그래머스

피보나치 수는 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번째 피보나치 수를 1234

programmers.co.kr

 

'Algorithm > Programmers' 카테고리의 다른 글

이중순위우선큐  (1) 2019.06.04
행렬의 곱셈  (0) 2019.06.04
프린터  (0) 2019.06.04
폰켓몬  (0) 2019.06.04
  (0) 2019.06.04

댓글