소개
이 랩에서는 Java 에서 주어진 숫자가 피보나치 수인지 확인하는 방법을 배우게 됩니다. 이를 달성하기 위해 세 가지 다른 접근 방식을 살펴볼 것입니다.
먼저, 지정된 항 수까지 피보나치 수열을 생성하는 방법을 배우게 됩니다. 그런 다음, 생성된 수열 내에 주어진 숫자가 존재하는지 확인하는 메서드를 구현할 것입니다. 마지막으로, 전체 수열을 생성하지 않고도 숫자가 피보나치 수인지 효율적으로 결정할 수 있는 수학 공식을 활용하여 확인 프로세스를 최적화할 것입니다.
피보나치 수열 생성
이 단계에서는 특정 항 수까지 피보나치 수열을 생성하는 Java 프로그램을 작성합니다. 피보나치 수열은 각 숫자가 이전 두 숫자의 합인 일련의 숫자이며, 일반적으로 0 과 1 로 시작합니다. 수열은 다음과 같습니다: 0, 1, 1, 2, 3, 5, 8, 13, 21 등.
새로운 Java 파일을 생성하고 이 수열을 생성하는 코드를 작성합니다.
WebIDE 가 아직 열려 있지 않은 경우 엽니다. 기본적으로
~/project디렉토리에 있어야 합니다. 그렇지 않은 경우, 하단의 터미널을 열고 다음을 입력합니다.cd ~/project~/project디렉토리에Fibonacci.java라는 새 파일을 생성합니다. 왼쪽의 파일 탐색기에서 마우스 오른쪽 버튼을 클릭하고 "New File"을 선택한 다음Fibonacci.java를 입력하여 이 작업을 수행할 수 있습니다.편집기에서
Fibonacci.java파일을 열고 다음 Java 코드를 복사하여 붙여넣습니다.import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter the number of terms for Fibonacci sequence: "); int n = scanner.nextInt(); if (n <= 0) { System.out.println("Please enter a positive integer."); } else if (n == 1) { System.out.println("Fibonacci sequence up to 1 term:"); System.out.println("0"); } else { System.out.println("Fibonacci sequence up to " + n + " terms:"); int firstTerm = 0; int secondTerm = 1; System.out.print(firstTerm + ", " + secondTerm); for (int i = 3; i <= n; ++i) { int nextTerm = firstTerm + secondTerm; System.out.print(", " + nextTerm); firstTerm = secondTerm; secondTerm = nextTerm; } System.out.println(); // Print a newline at the end } scanner.close(); } }이 코드의 주요 부분을 빠르게 이해해 보겠습니다.
import java.util.Scanner;: 사용자 입력을 읽기 위해Scanner클래스를 가져옵니다.public class Fibonacci:Fibonacci라는 메인 클래스를 선언합니다.public static void main(String[] args): 프로그램 실행이 시작되는 메인 메서드입니다.Scanner scanner = new Scanner(System.in);: 콘솔에서 입력을 읽기 위해Scanner객체를 생성합니다.System.out.print("Enter the number of terms... ");: 사용자에게 항 수를 입력하라는 메시지를 표시합니다.int n = scanner.nextInt();: 사용자로부터 정수 입력을 읽어n변수에 저장합니다.if-else if-else블록은 항 수 (n) 에 대한 다양한 경우를 처리합니다.int firstTerm = 0; int secondTerm = 1;: 수열의 처음 두 항을 초기화합니다.System.out.print(firstTerm + ", " + secondTerm);: 처음 두 항을 출력합니다.for루프는 후속 항을 계산하고 출력합니다.int nextTerm = firstTerm + secondTerm;: 이전 두 항을 더하여 다음 항을 계산합니다.firstTerm = secondTerm; secondTerm = nextTerm;: 다음 반복을 위해firstTerm과secondTerm을 업데이트합니다.scanner.close();:Scanner객체를 닫습니다.
Fibonacci.java파일을 저장합니다 (Ctrl+S 또는 Cmd+S).이제 터미널에서
javac명령을 사용하여 Java 프로그램을 컴파일합니다.javac Fibonacci.java오류가 없으면 이 명령은
~/project디렉토리에Fibonacci.class파일을 생성합니다.마지막으로
java명령을 사용하여 컴파일된 프로그램을 실행합니다.java Fibonacci프로그램은 항 수를 입력하라는 메시지를 표시합니다. 숫자를 입력 (예: 10) 하고 Enter 키를 눌러 피보나치 수열을 확인합니다.
Enter the number of terms for Fibonacci sequence: 10 Fibonacci sequence up to 10 terms: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34
피보나치 수열을 생성하는 Java 프로그램을 성공적으로 작성, 컴파일 및 실행했습니다!
수열에 숫자가 존재하는지 확인
이 단계에서는 생성된 피보나치 수열 내에 주어진 숫자가 존재하는지 확인하도록 Java 프로그램을 수정합니다. 여기에는 사용자의 입력 숫자를 생성된 수열의 항과 비교하는 로직을 추가하는 작업이 포함됩니다.
WebIDE 편집기에서
Fibonacci.java파일을 엽니다.수열에 숫자가 존재하는지 확인하는 로직을 포함하도록
main메서드를 수정합니다. 기존main메서드를 다음 코드로 바꿉니다.import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter the number of terms for Fibonacci sequence: "); int n = scanner.nextInt(); if (n <= 0) { System.out.println("Please enter a positive integer for the number of terms."); scanner.close(); return; // Exit the program } System.out.print("Enter the number to check if it exists in the sequence: "); int checkNum = scanner.nextInt(); System.out.println("Fibonacci sequence up to " + n + " terms:"); int firstTerm = 0; int secondTerm = 1; boolean found = false; // Check the first two terms if (checkNum == firstTerm) { found = true; } System.out.print(firstTerm); if (n > 1) { if (checkNum == secondTerm) { found = true; } System.out.print(", " + secondTerm); } // Generate and check subsequent terms for (int i = 3; i <= n; ++i) { int nextTerm = firstTerm + secondTerm; if (checkNum == nextTerm) { found = true; } System.out.print(", " + nextTerm); firstTerm = secondTerm; secondTerm = nextTerm; } System.out.println(); // Print a newline at the end if (found) { System.out.println(checkNum + " exists in the Fibonacci sequence."); } else { System.out.println(checkNum + " does not exist in the Fibonacci sequence."); } scanner.close(); } }변경 사항에 대한 설명은 다음과 같습니다.
- 확인하려는 숫자를 묻는 프롬프트를 추가했습니다 (
System.out.print("Enter the number to check...")). - 이 숫자를 새 변수
checkNum에 읽었습니다 (int checkNum = scanner.nextInt();). - 부울 변수
found가false로 초기화됩니다. 이 변수는 수열에서 숫자가 발견되었는지 추적합니다. - 루프 전에
checkNum이firstTerm또는secondTerm과 같은지 확인합니다. for루프 내에서nextTerm을 계산한 후checkNum이nextTerm과 같은지 확인합니다. 그렇다면found를true로 설정합니다.- 루프가 완료된 후
if-else문을 사용하여found변수의 값을 기반으로 숫자가 발견되었는지 여부를 출력합니다.
- 확인하려는 숫자를 묻는 프롬프트를 추가했습니다 (
Fibonacci.java파일을 저장합니다.터미널에서 수정된 프로그램을 컴파일합니다.
javac Fibonacci.java컴파일된 프로그램을 실행합니다.
java Fibonacci이제 프로그램은 항 수와 확인할 숫자를 묻습니다.
예시 1 (숫자가 존재함):
Enter the number of terms for Fibonacci sequence: 10 Enter the number to check if it exists in the sequence: 8 Fibonacci sequence up to 10 terms: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 8 exists in the Fibonacci sequence.예시 2 (숫자가 존재하지 않음):
Enter the number of terms for Fibonacci sequence: 10 Enter the number to check if it exists in the sequence: 10 Fibonacci sequence up to 10 terms: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 10 does not exist in the Fibonacci sequence.
생성된 피보나치 수열의 일부인지 확인하도록 프로그램을 성공적으로 수정했습니다.
수학 공식을 활용한 최적화
이전 단계에서는 피보나치 수열을 반복적으로 생성하고 각 항과 비교하여 숫자가 존재하는지 확인했습니다. 매우 큰 숫자의 경우 전체 수열을 생성하는 것은 비효율적일 수 있습니다. 이 단계에서는 수열을 생성하지 않고도 숫자가 피보나치 수인지 확인할 수 있는 피보나치 숫자의 수학적 속성을 탐구합니다.
양의 정수 x는 5*x^2 + 4 또는 5*x^2 - 4가 완전 제곱수일 경우에만 피보나치 수입니다. 완전 제곱수는 정수의 제곱인 정수입니다 (예: 4 는 2*2 이므로 완전 제곱수입니다).
이 공식을 사용하여 숫자가 피보나치 수인지 확인하는 새로운 Java 프로그램을 생성합니다.
~/project디렉토리에CheckFibonacci.java라는 새 파일을 생성합니다.CheckFibonacci.java를 열고 다음 Java 코드를 복사하여 붙여넣습니다.import java.util.Scanner; public class CheckFibonacci { // Function to check if a number is a perfect square public static boolean isPerfectSquare(int n) { if (n < 0) { return false; } int sqrt = (int) Math.sqrt(n); return (sqrt * sqrt == n); } // Function to check if a number is a Fibonacci number public static boolean isFibonacci(int n) { // n is Fibonacci if 5*n^2 + 4 or 5*n^2 - 4 is a perfect square return isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter a number to check if it is a Fibonacci number: "); int num = scanner.nextInt(); if (isFibonacci(num)) { System.out.println(num + " is a Fibonacci number."); } else { System.out.println(num + " is not a Fibonacci number."); } scanner.close(); } }이 코드의 새로운 부분을 살펴보겠습니다.
public static boolean isPerfectSquare(int n): 이것은 정수n을 가져와n이 완전 제곱수이면true를 반환하고 그렇지 않으면false를 반환하는 도우미 함수입니다. 정수 제곱근을 계산하고 제곱하면 원래 숫자가 반환되는지 확인합니다.public static boolean isFibonacci(int n): 이 함수는 수학 공식을 구현합니다.5*n*n + 4및5*n*n - 4를 계산하고isPerfectSquare함수를 사용하여 두 결과 중 하나가 완전 제곱수인지 확인합니다.||연산자는 "or"를 의미합니다.main메서드는 이제 사용자에게 숫자를 묻고isFibonacci함수를 호출하고 결과를 출력합니다.
CheckFibonacci.java파일을 저장합니다.터미널에서 새 프로그램을 컴파일합니다.
javac CheckFibonacci.java컴파일된 프로그램을 실행합니다.
java CheckFibonacci프로그램은 숫자 입력을 요청합니다. 숫자를 입력 (예: 13) 하고 Enter 키를 누릅니다.
예시 1 (피보나치 수):
Enter a number to check if it is a Fibonacci number: 13 13 is a Fibonacci number.예시 2 (피보나치 수가 아님):
Enter a number to check if it is a Fibonacci number: 10 10 is not a Fibonacci number.
이 방법은 단일 큰 숫자가 피보나치 수인지 확인하는 데 해당 숫자까지 수열을 생성하는 것보다 훨씬 더 효율적입니다.
요약
이 Lab 에서는 Java 에서 숫자가 피보나치 수인지 확인하는 방법을 배웠습니다. 먼저 간단한 반복적 접근 방식을 사용하여 특정 항 수까지 피보나치 수열을 생성하는 것으로 시작했습니다. 여기에는 피보나치 수열의 정의를 이해하고 항을 계산하고 출력하는 로직을 구현하는 작업이 포함되었습니다.
다음으로, 생성된 피보나치 수열 내에 주어진 숫자가 존재하는지 확인하는 방법을 탐구했습니다. 마지막으로, 전체 수열을 명시적으로 생성하지 않고도 숫자가 피보나치 수인지 효율적으로 결정하기 위해 수학 공식을 사용하는 최적화된 접근 방식에 대해 배웠습니다. 여기에는 피보나치 숫자의 속성을 이해하고 공식을 적용하여 확인을 수행하는 작업이 포함되었습니다.



