CodeStates_BE_44/과제

피보나치 수열 프로그램 만들기

조화이트 2023. 2. 23. 17:09
728x90
 💡 피보나치 수열 프로그램을 만들고 코드 리팩터링하기

출력 예시

[안내]피보나치 수열 프로그램 시작.
원하는 수열의 개수를 입력해 주세요 : 6
[피보나치 수열 출력]
1
1
2
3
5
8
[안내]프로그램을 종료합니다.

✏프로그램의 기능

  1. 사용자의 피보나치 수열 개수 입력 받기
  2. 피보나치 점화식을 통한 연산
  3. 피보나치 수열 출력 및 프로그램 종료 메시지 출력

Step 1. main 메서드에 전부 작성

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Scanner;

public class Fibonacci {
  public static void main(String[] args) throws IOException {
    // 1단계. 프로그램 시작을 알리는 출력문 선언
    System.out.println("[안내]피보나치 수열 프로그램 시작.");

    // 사용자의 입력값 받기.
    System.out.print("원하는 수열의 개수를 입력해 주세요 : ");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int inputNum = Integer.parseInt(br.readLine());

    // 2단계. 피보나치 수열의 점화식 코드 작성
    // 피보나치 수열의 첫 번째와 두 번째 값을 변수로 정의합니다.
    int first = 1;
    int second = 1;

    // 피보나치 수열이 저장될 배열 객체 선언
    ArrayList<Integer> fibo = new ArrayList<>();

    // 피보나치 수열의 첫 번째, 두 번째 값 할당
    fibo.add(first);
    fibo.add(second);

    // 반복문을 통한 피보나치 수열 점화식 작성
    for(int i=2; i<inputNum; i++) {
      fibo.add(fibo.get(i-2)+fibo.get(i-1));
    }

    // 3단계.
    // 결과 출력을 위한 안내 문구 출력 입니다.
    System.out.println("[피보나치 수열 출력]");
    for(int i=0; i<fibo.size(); i++) {
      System.out.println(fibo.get(i));
    }
    System.out.println("[안내]프로그램을 종료합니다.");
  }
}

Step 2. 코드 리팩터링

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;

public class Fibonacci {
  // 피보나치 수열의 첫 번째와 두 번째 값을 변수로 정의합니다.
  static final int first = 1;
  static final int second = 1;
  static int inputNum;

  public static void main(String[] args) throws IOException {
    // 1단계. 프로그램 시작을 알리는 출력문 선언
    System.out.println("[안내]피보나치 수열 프로그램 시작.");
    System.out.print("원하는 수열의 개수를 입력해 주세요 : ");

    // 사용자의 입력값 받기.
    inputNum = getUserInput();

    // 피보니치 수열이 저장될 배열 객체 선언
    ArrayList<Integer> fibo = new ArrayList<>();

    // 피보나치 수열의 첫 번째, 두 번째 값 할당
    fibo.add(first);
    fibo.add(second);

		// 피보나치 수열 생성
    getFibonacci(fibo);

		//피보나치 수열 출력
    System.out.println("[피보나치 수열 출력]");
    printNumbers(fibo);
    System.out.println("[안내]프로그램을 종료합니다.");
  }

  // 사용자의 입력값 받기
  static int getUserInput() throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    return Integer.parseInt(br.readLine());
  }

  // 반복문을 통한 피보나치 수열 생성
  static void getFibonacci(ArrayList<Integer> fibo) {
    for(int i=2; i<inputNum; i++) {
      fibo.add(fibo.get(i-2)+fibo.get(i-1));
    }
  }

  // 만들어진 피보나치 수열 출력
  static void printNumbers(ArrayList<Integer> fibo) {
    for(int i=0; i<fibo.size(); i++) {
      System.out.println(fibo.get(i));
    }
  }
}
728x90
반응형