▷문제 : https://www.acmicpc.net/problem/4150
4150번: 피보나치 수
문제 피보나치 수열은 다음과 같이 그 전 두 항의 합으로 계산되는 수열이다. 첫 두 항은 1로 정의된다. f(1) = 1, f(2) = 1, f(n > 2) = f(n − 1) + f(n − 2) 정수를 입력받아, 그에 해당하는 피보나치 수를 출력하는 프로그램을 작성하여라. 예제 입력 1 복사 100 예제 출력 1 복사 354224848179261915075 힌트 해당 테스트 데이터의 모든 정답은 1000자를 넘지 않는다. ( f(20) = 6765 이므
www.acmicpc.net
Note
피보나치 수를 구하는 알고리즘을 먼저 알아야 하는데 (재귀)피보나치 수열(Fibonacci Sequence) 를 참고하면 된다.
그러나 이 문제는 N번째 피보나치수를 구하는것 외에도 정수형으로 처리할 수 있는 크기가 넘는 수를 어떻게 덧셈 연산을 구현할 것인가? 이다.
백준 10757(문자열조작) 에서 큰수에 대해 덧셈 연산을 어찌 해야 하는지 살펴보았으니 여기에서는 자바에서 제공하는 BigInteger 클래스를 사용하여 문제의 답을 구하도록 하였다.
그러나 이 문제는 N번째 피보나치수를 구하는것 외에도 정수형으로 처리할 수 있는 크기가 넘는 수를 어떻게 덧셈 연산을 구현할 것인가? 이다.
백준 10757(문자열조작) 에서 큰수에 대해 덧셈 연산을 어찌 해야 하는지 살펴보았으니 여기에서는 자바에서 제공하는 BigInteger 클래스를 사용하여 문제의 답을 구하도록 하였다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println(fib(Integer.parseInt(br.readLine())));
}
public static BigInteger fib(int n) {
BigInteger a = BigInteger.valueOf(1);
BigInteger b = BigInteger.valueOf(1);
BigInteger c ;
for (int j=2 ; j <= n ; j++) {
c = a.add(b);
a = b;
b = c;
}
return (a);
}
}
Colored by Color Scripter
|
'코딩테스트(Coding Test) > 백준(Baekjoon OJ)' 카테고리의 다른 글
백준 10757 - 큰수 (문자열조작) (0) | 2019.07.03 |
---|---|
백준 9442 - Sort Me (정렬, 룩업테이블) (0) | 2019.07.03 |
백준 2947 - 나무조각 (버블정렬) (0) | 2019.07.03 |
백준 7785 - 회사에 있는 사람 (0) | 2019.06.28 |
백준 1620 - 나는야 포켓몬 마스터 이다솜 (0) | 2019.06.28 |