좋아요! 😄 백준 28465번: 피보나치 사각형 문제를 함께 풀이해보아요.
이 문제의 내용을 정리하고,
1️⃣ 입출력 예제를 직접 정하고,
2️⃣ 자바 코드를 한 줄 한 줄 설명하고,
3️⃣ 풀이까지 꼼꼼히 해드릴게요.
문제 요약:
정수 N이 주어질 때, N번째 피보나치 수를 한 변의 길이로 하는 정사각형의 넓이를 출력하는 문제.
→ N번째 피보나치 수를 F(N)이라 하면, 정답 = F(N) * F(N).
5
25
F(5) = 5 (피보나치 수열: 1, 1, 2, 3, 5...)5 * 5 = 258
441
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) 넓이를 출력
}
}
Scanner sc = new Scanner(System.in);→ 프로그램의 표준 입력을 받기 위해 Scanner를 생성해요.
실제 동작: 사용자로부터 정수를 읽을 수 있게 준비.
int N = sc.nextInt();→ 사용자에게 N번째 피보나치 수의 인덱스를 읽습니다.
실제 예제 동작: N = 8을 읽으면 N = 8이 변수에 저장.
sc.close();→ Scanner 리소스를 닫습니다.
왜 닫아요?
더 이상 입력을 안 받을 거니까 깔끔히 닫아요.
long a = 1; long b = 1;→ a와 b에 초깃값 F(1)과 F(2)를 저장.
이유:
피보나치 수열의 시작값.
if (N == 1 || N == 2) { ... }→ N이 1이나 2면 넓이는 무조건 1이므로 계산 생략.
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번째 수
long area = b * b;→ N번째 수 b를 제곱해서 넓이를 계산.
System.out.println(area);→ 정답 출력.
예제 N=8:
예제 N=5: