본문 바로가기

Java/Java 알고리즘 인프런

[Ch.02 - Array] 04. 피보나치 수열

반응형
4. 피보나치 수열
 

설명

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

  1. 배열 이용
  2. 재귀함수 이용
  3. 메모이제이션 이용

https://and-some.tistory.com/631

 

[Ch.07 - Recursive] 04. 피보나치 수열 (+메모이제이션)

4. 피보나치 수열 설명 1) 피보나키 수열을 출력한다. 피보나치 수열이란 앞의 2개의 수를 합하여 다음 숫자가 되는 수열이다. 2) 입력은 피보나치 수열의 총 항의 수 이다. 만약 7이 입력되면 1 1 2

and-some.tistory.com


import java.util.*;
  
public class Main {
  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-1]+answer[i-2];
    }
    
    return answer;
  }
  public static void main(String[] args){
    Main T = new Main();
    Scanner kb=new Scanner(System.in);
    int n = kb.nextInt()-1;    
    for(int x:T.solution(n)) System.out.print(x+" ");
  }
}

 

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner kb=new Scanner(System.in);
    int n = kb.nextInt();
    int[] arr = new int[n];
    arr[0]=1;
    arr[1]=1;
    System.out.print(arr[0]+" ");
    for(int i=1;i<n;i++){
      if(i!=n-1){
      arr[i+1]=arr[i]+arr[i-1];
      System.out.print(arr[i]+" ");
      }
      else
       System.out.print(arr[i]);
    }
  }
}

 

+) 세련된 풀이

import java.util.Scanner;

public class Main {
	//피보나치 수열
	//앞의 2개의 수를 합해 다음 숫자가 되는 수열
	//항의 수: N 입력
	public static void main(String[] args) {
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();


		for(int x : solution(n)) {
			System.out.print(x+" ");
		}
		kb.close();
		
	}
	static int[] solution(int n) {
		//1.ds
		int [] answer = new int[n];
		answer[0]=1;
		answer[1]=1;
		
		//2.for,while
		for(int i=2;i<n;i++) {
			answer[i]=answer[i-1]+answer[i-2];
		}
		
		return answer;
	}
	

}

 

+) 세련된 풀이2

import java.util.*;

class Main {
	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) {
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		int n = kb.nextInt();
		T.solution(n);
	}
}

import java.util.Scanner;
  
public class Main {
  public static void main(String[] args){
    Scanner in=new Scanner(System.in);
    int n=in.nextInt();
    int[] arr = new int[n];
    arr[0]=1;
    arr[1]=1;
    arr[2]=2;
    for(int i=3;i<n;i++){
      arr[i]=arr[i-2]+arr[i-1];
    }
    for(int x: arr) System.out.print(x+" ");
  }
}
반응형