ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • section7.4
    알고리즘 2025. 8. 30. 21:27
    피보나치 수열
    1) 피보나치 수열을 출력한다 피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다.
    2) 입력은 피보나치 수열의 총 항의 수 이다 만약 7이 입력되면 1 1 2 3 5 8 13을 출력하면 된다.
    
    입력설명
    첫 줄에 총 항수 N(3<=N<=45)이 입력된다
    
    출력설명
    첫 줄에 피보나치 수열을 출력합니다.
    
    입력예제 1
    10
    
    출력예제 1
    1 1 2 3 5 8 13 21 34 55

     

     

     

    SOLUTION

    public class Answer4 {
        public static void main(String[] args) {
            // for문으로 사용하는게 훨씬 성능이 좋다
            // 재귀는 스택 프레임 호출되기 때문에 성능이 안 좋음
            // 코테 보는 중소에서는 두 방법 모두 구현하라는 문제가 출제됨
            Answer4 T = new Answer4();
            int n = 10;
            for (int i = 1; i <= n; i++) {
                System.out.print(T.DFS(i)  + " ");
            }
        }
    
        public int DFS(int n) {
            if (n == 1) {
                return 1;
            } else if (n == 2) {
                return 1;
            } else {
                return DFS(n-2) + DFS(n-1);
            }
        }
    }

     

     

     

    SOLUTIONV2

    public class Answer4 {
        static int[] fibo;
    
        public static void main(String[] args) {
            Answer4 T = new Answer4();
            int n = 10;
            fibo = new int[n+1];
            T.DFS(n);
            for (int i = 1; i <= n; i++) {
                System.out.print(fibo[i]  + " ");
            }
        }
    
        public int DFS(int n) {
            // 메모이제이션
            if (fibo[n] > 0) {
                return fibo[n];
            }
            
            if (n == 1) {
                return fibo[n] = 1;
            } else if (n == 2) {
                return fibo[n] = 1;
            } else {
                return fibo[n] = DFS(n-2) + DFS(n-1);
            }
        }
    }

     

     

     

    public class Question4 {
        public static void main(String[] args) {
            int[] arr = new int[10];
            for (int x : arrAnswer(10, arr)) {
                System.out.print(x + " ");
            }
        }
        
        public static int[] arrAnswer(int n, int[] arr) {
            for (int i = 0; i < n; i++) {
                if (i == 0) {
                    arr[0] = 1;
                } else if (i == 1) {
                    arr[1] = 1;
                } else {
                    arr[i] = arr[i-1] + arr[i-2];
                }
            }
            return arr;
        }
    }

    혹시 몰라서 배열로도 풀어봤다

    728x90

    '알고리즘' 카테고리의 다른 글

    section7.6  (0) 2025.09.02
    section7.5  (0) 2025.09.02
    section7.3  (0) 2025.08.30
    section7.2  (0) 2025.08.30
    section7.1  (0) 2025.08.30
Designed by Tistory.