반응형
[1] 백준 카테고리
단계별로 풀어보기
재귀
2단계 10872번 문제
피보나치 수 5
https://www.acmicpc.net/problem/10870
[2] 문제
피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.
이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.
n=17일때 까지 피보나치 수를 써보면 다음과 같다.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597
n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.
1. 입력
첫째 줄에 n이 주어진다. n은 20보다 작거나 같은 자연수 또는 0이다.
2. 출력
첫째 줄에 n번째 피보나치 수를 출력한다.
3. 예제 입력 1
10
4.예제 출력 1
55
[3] 정답
1. 정답 해설 미포함
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static int N;
public static void main(String[] args) throws NumberFormatException, IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
N = Integer.parseInt(st.nextToken());
fibo();
}
public static void fibo() {
int a=0;
int b=1;
int c=0;
if(N==0) {
System.out.println("0");
}
else if(N==1) {
System.out.println("1");
}
else {
for(int i=2;i<=N;i++) {
c=a+b;
a=b;
b=c;
}
System.out.println(c);
}
}
}
2. 정답 해설 포함
import java.io.BufferedReader;
/* BufferedReader 사용을 위해서 java.io.BufferedReader 클래스를 import 한다.
Enter를 경계로 인식하고 받은 데이터는 String으로 고정된다.*/
import java.io.InputStreamReader;
/* byte 단위 데이터를 문자 단위 데이터로 처리할 수 있도록 변환해주기 위해서
InputStreamReader를 사용한다.
InputStreamReader 사용을 위해서 java.io.InputStreamReader 클래스를 import 한다.*/
import java.io.IOException;
/* 예외 처리를 위해서 IOException를 사용한다.
IOException 사용을 위해서 java.io.IOException 클래스를 import 한다.*/
import java.util.StringTokenizer;
/* 공백 단위로 호출하기 위해서 StringTokenizer를 사용한다
StringTokenizer를 사용하기 위해서
StringTokenizer java.util.String 클래스를 import 한다.*/
public class Main {
// 접근제어자 public으로 Main 클래스를 선언한다.
public static int N;
// 접근제어자 public으로 메모리에 상주하게 int형 변수 N를 선언한다.
public static void main(String[] args) throws NumberFormatException, IOException{
/* 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 main 함수를 선언한다.
예외처리로 NumberFormatException, IOException를 포함한다.*/
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// BufferedReader 객체 br를 선언한다
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
// String 객체 st를 선언한다 이제 공백으로 값을 입력받을 수 있다.
N = Integer.parseInt(st.nextToken());
// 변수 N에 값을 공백 단위로 구분해서 입력받는다.
fibo();
// 함수 fibo()를 호출한다
}
public static void fibo() {
// 접근제어자 public으로 메모리에 상주하게 리턴값이 없이 함수 fibo()를 선언한다.
int a=0;
// int형 변수 a를 선언하고 0으로 초기화한다.
int b=1;
// int형 변수 b를 선언하고 0으로 초기화한다.
int c=0;
// int형 변수 c를 선언하고 0으로 초기화한다.
if(N==0) {
// N이 0일때 괄호안의 코드가 실행된다.
System.out.println("0");
// 0를 출력한다.
}
else if(N==1) {
// N이 1일때 괄호안의 코드가 실행된다.
System.out.println("1");
// 1를 출력한다.
}
else {
// 다른 if문과 else if문 조건에 해당되지 않을때 괄호안의 코드가 실행된다.
for(int i=2;i<=N;i++) {
// i가 2~N일때 괄호안의 코드가 실행된다.
c=a+b;
// a+b한 값을 변수 c에 저장한다.
a=b;
// b값을 변수 a에 저장한다.
b=c;
// c값을 변수 c에 저장한다.
}
System.out.println(c);
// 변수 c값을 출력한다.
}
}
}
피보나치 수열 수열 문제이다. 피보나치 수열에서 N번째 피보나치 수는 N-2번째 피보나치 수와 N-1번째 피보나치 수의 합이다.
이를 코드로 나타내면 다음과 같다.
public static void fibo() {
int a=0;
int b=1;
int c=0;
if(N==0) {
System.out.println("0");
}
// 0번째 피보나치 수 출력
else if(N==1) {
System.out.println("1");
}
// 1번째 피보나치 수 출력
else {
for(int i=2;i<=N;i++) {
c=a+b;
a=b;
b=c;
}
// 2번째 이상의 n번째 피보나치 수 출력
}
0번째와 1번째 피보나치 수는 이미 주어져 있다. 그러므로 N이 0일때와 1일때는 이미 정해져 있는 수를 출력해 주면 된다. 2번째 이상의 피보나치 수를 구할 때는 n-2번째와 n-1번째 수열을 구하면 된다.
반응형
'프로그래밍 > 백준 문제 풀이(자바)' 카테고리의 다른 글
백준 11729번 자바 문제 답/해설(하노이 탑 이동 순서 문제) (0) | 2022.01.05 |
---|---|
백준 2447번 자바 문제 답/해설(별 찍기 - 10 문제) (0) | 2022.01.04 |
백준 10872번 자바 문제 답/해설(팩토리얼 문제) (0) | 2022.01.02 |
백준 1002번 자바 문제 답/해설(터렛 문제) (0) | 2022.01.01 |
백준 3053번 자바 문제 답/해설(택시 기하학 문제) (0) | 2021.12.31 |