본문 바로가기

코딩테스트(Coding Test)/백준(Baekjoon OJ)

백준 4150 - 피보나치 수 (BigInteger)

▷문제 : 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 클래스를 사용하여 문제의 답을 구하도록 하였다.

 

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
 
 
 
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