피보나치 수에 대한 개념이 없어 우선 구글링을 통해 개념을 공부하고, 문제를 풀이했다.
참조한 자료
피보나치 수열(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);
}
}