Problem Solving

[Java] Requirements Q060: 피보나치 수열

Isaac S. Lee 2023. 7. 31. 08:57
package com.test.question;

public class Q060 {
	public static void main(String[] args) {
		/*
		● 요구사항
		아래와 같이 출력하시오.
		
		● 조건
		- 마지막 숫자가 100이 넘기 전까지 출력하시오.
		
		● 출력
		1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + 55 + 89 +  = 232
		  0   1   1   2   3   5    8    13   21   44
		*/
		
		int sum = 0; // 피보나치 수열 누적 합계
		
        for (int i = 1; i < 100; i++) {
            // 수열의 숫자가 100 초과
            if (getFibonacci(i) > 100) {
            	// 피보나치 수열 누적 합계 출력
                System.out.printf(" = %d", sum);
            	break;
            }
            
            // 피보나치 수열 누적 합계 저장
            sum = sum + getFibonacci(i);
            
            // 피보나치 수열 출력
            System.out.printf(" %d +", getFibonacci(i));
        }
	}
    
	/*
	피보나치 수열 공식: 이전 두 항의 값을 더하여 다음 항을 만들어내는 수열
	Fn = Fn-1 + Fn-2
	
	F(0) = 0
	F(1) = 1
	F(2) = F(1) + F(0) = 1 + 0 = 1
	F(3) = F(2) + F(1) = 1 + 1 = 2
	F(4) = F(3) + F(2) = 2 + 1 = 3
	F(5) = F(4) + F(3) = 3 + 2 = 5
	
	이전 항과 두 번째 이전항을 더해가며 피보나치 수열 완성
	*/
	
	// 피보나치 수열 계산
    private static int getFibonacci(int n) {

    	int result = 0; // 피보나치 수열 계산 결과
    	int num1 = 0; // 이전 항
    	int num2 = 1; // 두 번째 이전 항
    	
    	// 0과 1일 경우 그대로 출력
    	if (n == 0 || n == 1) {
    		return n;
    	}
    	else {
    		// 0과 1이 아닐 경우 피보나치 수열 공식 적용
    		for (int i = 2; i <= n; i++) {
    			result = num1 + num2;
    			num1 = num2;
    			num2 = result;
    		}
    		
    		return result;
    	}
    }
}