forDevLife
[백준] 1003 - 피보나치 함수 본문
평범한 피보나치로 보이나, 피보나치가 결국은 fib(0), fib(1)로 이루어져 있기 때문에 이 수를 세는게 관건이다.
class를 통해 fib_0, fib_1의 개수를 따로 계산한 후, 배열을 만들어 값이 있으면 리턴, 없으면 만들어서 리턴하는 방식으로 구했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class fib_zo {
int fib_0;
int fib_1;
public fib_zo(int fib_0, int fib_1) {
this.fib_0 = fib_0;
this.fib_1 = fib_1;
}
}
public class Main {
static fib_zo fibo_arr[] = new fib_zo[46];
public fib_zo fibo(int n) {
if (n == 0) {
return fibo_arr[0] = new fib_zo(1, 0);
} else if (n == 1) {
return fibo_arr[1] = new fib_zo(0, 1);
} else {
if (fibo_arr[n] != null) {
return fibo_arr[n];
} else {
fib_zo tmp1 = fibo(n - 1);
fib_zo tmp2 = fibo(n - 2);
int a = tmp1.fib_0 + tmp2.fib_0;
int b = tmp1.fib_1 + tmp2.fib_1;
return fibo_arr[n] = new fib_zo(a, b);
}
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
Main T = new Main();
while (n-- > 0) {
int m = Integer.parseInt(br.readLine());
fib_zo tmp = T.fibo(m);
sb.append(tmp.fib_0 + " " + tmp.fib_1 + "\n");
}
System.out.println(sb);
}
}
'알고리즘' 카테고리의 다른 글
[백준] 1946 - 신입 사원 (0) | 2021.06.29 |
---|---|
[백준] 1389 - 케빈 베이컨의 6단계 법칙 (0) | 2021.06.29 |
[백준] 1966 - 프린터 큐 (0) | 2021.06.18 |
[백준] 1874 - 스택수열 (0) | 2021.06.18 |
[백준] 1929 - 소수 구하기 (0) | 2021.06.18 |
Comments