본문 바로가기
알고리즘/백준 문제풀이

[백준 JAVA] 10826 피보나치 수4

by 새싹감자 2022. 9. 18.

문제


https://www.acmicpc.net/problem/10826

 

10826번: 피보나치 수 4

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

 

 

풀이방법


간단한 피보나치 수 문제 같지만, 일반적인 피보나치 수처럼 문제를 풀면, ArrayIndexOutOfBounds 런타임 에러가 나는 문제였다. 입력값을 보면 n은 10,000까지 가기 때문이다.

 

이 문제를 해결하기 위해서는 BigInteger를 사용해야 했다.

Int는 메모리 크기는 4byte로 표현할 수 있는 범위는 -2,147,483,648 ~ 2,147,483,647이고 long은 메모리 크기는 8byte로 표현할 수 있는 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807이다.

 

 그에 반에 BigInteger은 문자열 형태로 이루어져 있어 숫자의 범위가 무한하기에 어떠한 숫자이든지 담을 수 있다.

코드


 

import java.math.BigInteger;
import java.util.Scanner;

public class Main{
		public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input= new Scanner(System.in);
		int n=input.nextInt();
		BigInteger fib[]=new BigInteger[n+1];
		fib[0]=BigInteger.ZERO;
		if(n>0) {
			fib[1]=BigInteger.ONE;
		}
		
		for(int i=2; i<fib.length; i++) {
			fib[i]=fib[i-1].add(fib[i-2]);
		}
		System.out.println(fib[n]);
	}

}
 
 

'알고리즘 > 백준 문제풀이' 카테고리의 다른 글

[백준 Java] 주사위 굴리기 2  (1) 2022.09.19
[백준 JAVA] N과 M(1~6)  (0) 2022.09.18
[백준 JAVA] 17406 배열 돌리기 4  (0) 2022.09.18
[백준 JAVA] 14500 테트로미노  (0) 2022.09.16
[백준 JAVA]2636 치즈  (0) 2022.09.15

댓글