import java.math.BigInteger;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int num = Integer.parseInt(bf.readLine());
BigInteger temp = new BigInteger("0");
BigInteger result = new BigInteger("0");
BigInteger newResult = new BigInteger("1");
BigInteger per = new BigInteger("10007");
// long temp = 0;
// long result = 0;
// long newResult = 1;
for (int i = 1; i<=num; i++) {
temp = newResult;
newResult = result.add(newResult);
result = temp;
}
System.out.println(newResult.remainder(per));
}
}
구하려는 num은 (num-2) + (num-1) 으로 구할 수 있다.
변수 세게를 만들어 더해주는 로직을 짰는데 당연히 int와 long범위를 초과했다.
그래서 더 큰 bigInteger을 쓰자는 결론으로 문제를 풀었다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] dp = new int[1001];
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i <= n; i++)
dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
System.out.println(dp[n]);
}
}
하지만 1001개짜리 배열을 생성하고 배열선언할때마다 10007로 나눈 나머지로 저장하면 숫자가 초과할 일이 없다.