[프로그래머스] 피보나치 수

이찬혁·2024년 3월 20일

알고리즘

목록 보기
21/72

프로그래머스 Lv2 - 피보나치 수 문제

피보나치 수에 대한 개념이 없어 우선 구글링을 통해 개념을 공부하고, 문제를 풀이했다.
참조한 자료

피보나치 수열(Fibonacci numbers) 이란?

  • 이전 두 항의 합이 다음 항이 되는 수열을 의미한다. 즉, 첫째 항과 둘째 항이 0, 1이고 이후 모든 항은 모든 항은 바로 앞 두항의 합으로 이루어지는 수열을 의미합니다.
  • 피보나치 수열의 예로는 [0, 1, 1, 2, 3, 5, 8, 13, 21, 34,...]과 같은 형태로 구성이 됩니다.

피보나치 수열의 연산식 F(N) = F(N-1) + F(N-2)이다
F(0) = 0, F(1) = 1 일 때
F(n) = F(n-1) + F(n-2) (n ≥ 2) 계산식이 된다

  • 즉, n번째 항은 n-1번째 항과 n-2번째 항을 더한 값이 됩니다.

위 피보나치 수열의 연산식을 사용하여 이전의 이전 수(F(0) = 0)을 의미하는 prevPrev 변수와
이전 수(F(1) = 1)를 의미하는 prev 변수를 두어 반복문을 통해 피보나치 수를 구하였다.

Fibonacci.java

package com.example.Programmers.Lv2;

/**
 * 프로그래머스 Lv2 - 피보나치 수
 */
public class Fibonacci {
    public int solution(int n) {
        int answer = 0;
        int prev = 1;
        int prevPrev = 0;
        for (int i = 2; i <= n; i++) {
            answer = (prev + prevPrev) % 1234567;
            prevPrev = prev;
            prev = answer;
        }

        return answer;
    }
}

FibonacciTest.java

package com.example.Programmers.Lv2;

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class FibonacciTest {

    @Test
    public void testFibonacci() {

        Fibonacci f = new Fibonacci();
        int result1 = f.solution(3);
        int result2 = f.solution(5);

        assertEquals(2, result1);
        assertEquals(5, result2);
    }
}
profile
나의 개발로그

0개의 댓글