문제
https://www.acmicpc.net/problem/10826
풀이방법
간단한 피보나치 수 문제 같지만, 일반적인 피보나치 수처럼 문제를 풀면, 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 |
댓글