피보나치

류한선·2025년 6월 22일

실기연습-2

목록 보기
23/95

좋아요! 😄 백준 28465번: 피보나치 사각형 문제를 함께 풀이해보아요.

이 문제의 내용을 정리하고,
1️⃣ 입출력 예제를 직접 정하고,
2️⃣ 자바 코드를 한 줄 한 줄 설명하고,
3️⃣ 풀이까지 꼼꼼히 해드릴게요.


🔍 문제 이해

문제 요약:
정수 N이 주어질 때, N번째 피보나치 수를 한 변의 길이로 하는 정사각형의 넓이를 출력하는 문제.

→ N번째 피보나치 수를 F(N)이라 하면, 정답 = F(N) * F(N).


🧪 입출력 예제

📥 예제 입력 1

5

📤 예제 출력 1

25

설명

  • 5번째 피보나치 수: F(5) = 5 (피보나치 수열: 1, 1, 2, 3, 5...)
  • 넓이 = 5 * 5 = 25

📥 예제 입력 2

8

📤 예제 출력 2

441

설명

  • 8번째 피보나치 수: F(8) = 21 (1, 1, 2, 3, 5, 8, 13, 21)
  • 넓이 = 21 * 21 = 441

💻 자바 코드

이제 이 문제를 푸는 Java 코드를 보여드릴게요.

중요:
피보나치 수가 커질 수 있으니 long을 쓰겠습니다.

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 1) 사용자로부터 입력을 받기 위해 Scanner 생성
        int N = sc.nextInt();               // 2) N번째 피보나치 수를 계산하기 위해 정수 N을 읽음
        sc.close();                        // 3) Scanner 닫기

        // 4) N번째 피보나치 수를 계산하기 위한 변수를 준비
        long a = 1;   // F(1) = 1
        long b = 1;   // F(2) = 1

        // 5) N이 1 또는 2인 경우는 바로 반환 가능
        if (N == 1 || N == 2) {
            System.out.println(1); // 넓이는 1 * 1 = 1
            return;
        }

        // 6) 3번째 수부터 N번째 수까지 피보나치 계산
        for (int i = 3; i <= N; i++) {
            long next = a + b; // 현재 수 = 전 두 수의 합
            a = b;             // 한 칸 옮기기
            b = next;          // 한 칸 옮기기
        }

        // 7) b에는 N번째 피보나치 수가 담겨있음
        long area = b * b; // 넓이 계산
        System.out.println(area); // 8) 넓이를 출력
    }
}

🔬 한 줄 한 줄 디버깅 해설

1) Scanner sc = new Scanner(System.in);

→ 프로그램의 표준 입력을 받기 위해 Scanner를 생성해요.
실제 동작: 사용자로부터 정수를 읽을 수 있게 준비.

2) int N = sc.nextInt();

→ 사용자에게 N번째 피보나치 수의 인덱스를 읽습니다.
실제 예제 동작: N = 8을 읽으면 N = 8이 변수에 저장.

3) sc.close();

→ Scanner 리소스를 닫습니다.
왜 닫아요?
더 이상 입력을 안 받을 거니까 깔끔히 닫아요.

4) long a = 1; long b = 1;

ab에 초깃값 F(1)과 F(2)를 저장.
이유:
피보나치 수열의 시작값.

5) if (N == 1 || N == 2) { ... }

→ N이 1이나 2면 넓이는 무조건 1이므로 계산 생략.

6) for (int i = 3; i <= N; i++) { ... }

→ N번째 수를 찾기 위해 3부터 N까지 반복.
동작 예제 (N=8):

i=3: next=2, a=1, b=2
i=4: next=3, a=2, b=3
i=5: next=5, a=3, b=5
i=6: next=8, a=5, b=8
i=7: next=13,a=8,b=13
i=8: next=21,a=13,b=21 <- N번째 수

7) long area = b * b;

→ N번째 수 b를 제곱해서 넓이를 계산.

8) System.out.println(area);

→ 정답 출력.


🎯 계산과정 정리

예제 N=8:

  • F(8) = 21
  • 넓이 = 21 * 21 = 441 출력 ✅

예제 N=5:

  • F(5) = 5
  • 넓이 = 5 * 5 = 25 출력 ✅

0개의 댓글