맨 처음엔 문제만 읽고 for문으로 풀었는데...
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int f2 = 0;// f(n-2)
int f1 = 1;// f(n-1)
int f = 0; // f(n)
if (n == 0) {// 0번째 피보나치 수는 0
f = 0;
} else if (n == 1) {// 1번째 피보나치 수는 0
f = 1;
} else {
for (int i = 1; i < n; i++) {
f = f1 + f2;// n번째 숫자는 n-1번째 숫자와 n-2번째 숫자를 더한값
f2 = f1;// 다음 f(n-2)번째 피보나치 수를 f(n-1)번째 숫자로 치환
f1 = f;// 다음 f(n-1)번째 피보나치 수를 f(n)번째 숫자로 치환
}
}
System.out.println(f);
}
}
다시 보니.. 문제의 단계가 '재귀'였다.
그래서 재귀함수를 이용해서 다시 풀어보았다.
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println(pivo(n));
}
public static int pivo(int n) {
if (n == 0)
return 0;
if (n == 1)
return 1;
return pivo(n - 1) + pivo(n - 2);
}
}
검색해보니 저런식으로 하면 n의 크기가 클수록 pivo 함수도 계속 반복되기 때문에
효율적이지 않다고 한다..!
'알고리즘 > 백준' 카테고리의 다른 글
백준 2231 분해합 자바 (0) | 2020.01.20 |
---|---|
백준 2798 블랙잭 자바 (0) | 2020.01.16 |
백준 1002 티렛 자바 (0) | 2020.01.13 |
백준 3053 택시 기하학 자바 (0) | 2020.01.10 |
백준 4153 직각삼각형 자바 (0) | 2020.01.09 |
댓글