Java 알고리즘

[Java] 피보나치 수열

엘라 ELLA 2023. 8. 17. 11:00
728x90
반응형

문제

 

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

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

 

입력

 

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

 

출력

 

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

 
입력예시
 
10
 
 
출력예시
 
 
1 1 2 3 5 8 13 21 34 55

 

 


 

풀이 및 해설

 

import java.util.Scanner;

public class Main {
    //Scanner로 입력받은 숫자 n을 넘겨받음
    public String solution(int n){
        //문자열로 답 answer을 설정
        String answer = "";
        //첫번째 수와 두번째 수는 1로 고정이므로 고정값으로 정의
        int num1 = 1;
        int num2 = 1;
        //앞의 두 수를 합친 다음 숫자 선언
        int nextNum;
        
        //문자열 answer에 첫번째 수 와 두번째 수 (고정값) 넣기. 빈 문자열 " " 을 추가 해 띄어쓰기 효과
        answer += num1 + " ";
        answer += num1 + " ";
        //세번째 숫자부터 n번째 숫자까지 반복문
        for (int i = 2; i<n; i++){
            //다음 숫자는 앞의 두 숫자의 합
            nextNum = num1 + num2;
            //answer에 앞 두 숫자의 합을 구한 nextNum 누적
            answer += nextNum + " ";
            //다음 반복문을 위해 한칸씩 옆으로 이동
            num1 = num2;
            num2 = nextNum;
        }
        //전부 누적 한 문자열 answer return
        return answer;
    }

    //main 함수
    public static void main(String[] args) {
        Main T = new Main();
        //scanner로 입력값을 받는 부분
        Scanner sc = new Scanner(System.in);
        //입력한 숫자를 받음
        int n = sc.nextInt();
        // String answer을 출력
        System.out.println(T.solution(n));
    }
}

 

 

배열을 이용해 해결한 풀이

 

import java.util.Scanner;

public class Main {
    //Scanner로 입력받은 숫자 n을 넘겨받음
    public int[] solution(int n){
        // 배열로 답 answer을 설정
        int[] answer = new int[n];
        //첫번째 수와 두번째 수는 1로 고정이므로 고정값으로 정의
        answer[0] = 1;
        answer[1] = 1;

        //배열의 i번째는 그 전전수 + 그 전 수임을 지정함
        for (int i = 2; i<n; i++){
           answer[i] = answer[i-2] + answer[i-1];
        }
        //전부 누적 한 문자열 answer return
        return answer;
    }

    //main 함수
    public static void main(String[] args) {
        Main T = new Main();
        //scanner로 입력값을 받는 부분
        Scanner sc = new Scanner(System.in);
        //입력한 숫자를 받음
        int n = sc.nextInt();
        // 배열 answer을 출력
        for (int x : T.solution(n)) System.out.print(x + " ");
    }
}
반응형