Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)로 N까지 피보나치 수열의 짝수 합 구하는 방법


이 글에서는 숫자 N까지 피보나치 수열(Fibonacci Series)의 짝수 합을 구하는 자바 프로그램 작성 방법을 알아봅니다. 피보나치 수열은 바로 앞의 두 수를 더한 값을 다음 항으로 하는 수열이며, 여기서 말하는 '짝수 합'은 수열에서 짝수 번째 위치(인덱스)에 있는 항들을 모두 더한 값을 의미합니다.

피보나치 수열은 앞의 두 수를 더해 다음 수를 만들어 내며, 두 개의 초기값 F0과 F1에서 시작합니다. 초기값은 각각 0, 1 또는 1, 1로 지정할 수 있으며, 일반화하면 다음과 같습니다.

Fn = Fn-1 + Fn-2

따라서 피보나치 수열은 아래와 같은 형태가 될 수 있습니다.

F8 = 0 1 1 2 3 5 8 13

또는 다음과 같이 시작할 수도 있습니다.

F8 = 1 1 2 3 5 8 13 21

다음은 피보나치 수열의 짝수 합 계산 예시입니다.

입력

입력값이 다음과 같다고 가정해 보겠습니다.

n의 값: 10

출력

원하는 출력 결과는 다음과 같습니다.

피보나치 수열의 짝수 합은 10945입니다

알고리즘

Step 1 - 시작
Step 2 - 세 개의 정수 my_input, i, sum을 선언한다
Step 3 - 사용자에게 정수 값 입력을 요청하거나 값을 미리 지정(hardcode)한다
Step 4 - 값을 읽어 들인다
Step 5 - for 반복문으로 1부터 N까지 순회하며, 연속된 두 수의 합을 현재 피보나치 수로 저장한다
Step 6 - 결과를 화면에 출력한다
Step 7 - 종료한다

예제 1: 사용자 입력값 사용하기

이 예제에서는 Scanner를 사용해 사용자가 직접 값을 입력합니다. 온라인 코딩 도구(컴파일러)에서 실습해 보면서 동작을 확인할 수도 있습니다.

import java.util.Scanner;
import java.io.*;
public class FibonacciSum {
   public static void main(String[] args){
      int my_input, i, sum;
      System.out.println("필요한 패키지가 임포트되었습니다");
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("리더(Scanner) 객체가 정의되었습니다 ");
      System.out.println("N의 값을 입력하세요: ");
      my_input = my_scanner.nextInt();
      int fibonacci[] = new int[2 * my_input + 1];
      fibonacci[0] = 0;
      fibonacci[1] = 1;
      sum = 0;
      for (i = 2; i <= 2 * my_input; i++) {
         fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2];
         if (i % 2 == 0)
            sum += fibonacci[i];
      }
      System.out.printf("%d까지 피보나치 수열의 짝수 합은 %d입니다", my_input, sum);
   }
}

출력

필요한 패키지가 임포트되었습니다
리더(Scanner) 객체가 정의되었습니다 
N의 값을 입력하세요: 
10
10까지 피보나치 수열의 짝수 합은 10945입니다

예제 2: 값 미리 정의하기

이 예제에서는 정수 값이 코드 안에 미리 정의되어 있으며, 프로그램이 이 값을 사용해 계산한 뒤 콘솔에 결과를 출력합니다.

import java.util.Scanner;
import java.io.*;
public class FibonacciSum {
    public static void main(String[] args){
        int my_input, j, sum;
        my_input = 10;
        System.out.println("N의 값: ");
        int fibonacci[] = new int[2 * my_input + 1];
        fibonacci[0] = 0;
        fibonacci[1] = 1;
        sum = 0;
        for (j = 2; j <= 2 * my_input; j++) {
            fibonacci[j] = fibonacci[j - 1] + fibonacci[j - 2];
            if (j % 2 == 0)
                sum += fibonacci[j];
        }
        System.out.printf("%d까지 피보나치 수열의 짝수 합은 %d입니다", my_input, sum);
    }
}

출력

N의 값: 
10까지 피보나치 수열의 짝수 합은 10945입니다

코드 작동 원리

두 예제의 핵심 로직은 동일합니다. 먼저 크기가 2×N+1인 배열을 만들어 인덱스 0과 1에 초기값 0과 1을 저장하고, 반복문을 돌며 앞의 두 항을 더해 나머지 항을 차례로 채웁니다. 이때 인덱스가 짝수(i % 2 == 0)일 때만 해당 항을 sum 변수에 누적합니다. N이 10일 경우 인덱스 0, 2, 4, ..., 20 위치의 항들이 더해져 최종 결과 10945가 출력됩니다.