본문 바로가기

Algorithm/Inflearn

[Inflearn] 자바 알고리즘 문제풀이 #02-04 4. 피보나치 수열

문제

설명

1) 피보나치 수열을 출력한다. 피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다.

2) 입력은 피보나치 수열의 총 항의 수 이다. 만약 7이 입력되면 1 1 2 3 5 8 13을 출력하면 된다.

 

입력 

첫 줄에 총 항수 N(3<=N<=45)이 입력된다.

 

출력 

첫 줄에 피보나치 수열을 출력합니다.

 
 
 
내 풀이
 
import java.util.Scanner;

public class Main2_4 {
    public int[] Solution(int n) {
        int[] answer = new int[n];
        answer[0] = 1;
        answer[1] = 1;
        for (int i = 2; i < n; i++) {
            answer[i] = answer[i-2] + answer[i-1];
        }
        return answer;
    }

    public static void main(String[] args) {
        Main2_4 T = new Main2_4();
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        for(int x : T.Solution(num))
            System.out.print(x + " ");
    }
}

 

 

 

선생님 풀이 - 배열 사용 X
import java.util.Scanner;

public class Main2_4 {
    public void Solution(int n) {
        int a=1, b=1, c;
        System.out.print(a + " " + b + " ");
        for (int i = 2; i < n; i++) {
            c=a+b;
            System.out.print(c + " ");
            a=b;
            b=c;
        }
    }

    public static void main(String[] args) {
        Main2_4 T = new Main2_4();
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        T.Solution(num);
    }
}

 

 

 

결과

 

 

 

알게된 점

피보나치 수열은 재귀함수로만 작성해서 재귀함수로 어떻게든 해봐야하나 했는데 그냥 단순하게 하면 되는 거여따...

문제 풀이를 하면 할수록 나는 너무 복잡하게만 생각한다ㅠㅠ 컴퓨터는 멍청하니까 컴퓨터가 알아들을 수 있도록 생각하는 연습하면 좋겠다

 

 

- 피보나치 수열 (재귀함수 ver)

https://rookie-programmer.tistory.com/33

 

[Inflearn] 영리한 프로그래밍을 위한 알고리즘 - 순환 (Recursion) 의 개념과 기본 예제 1

재귀호출 함수에는 위처럼 무한 반복을 멈추게 하는 조건문을 가진 Base case와, Base case에 수렴할 때까지 반복되는 행동이 있는 Recursive case로 나뉜다. 예제 1. 팩토리얼 (Factorial) 위 사진처럼 공식

rookie-programmer.tistory.com