728x90
반응형
https://www.acmicpc.net/problem/2749
풀이
피보나치 수 1 = int
피보나치수 2 = long
피보나치수 3 = 피사노 주기
피보나치수 4 = BigInteger로 풀면된다.
(피보나치 수를 나눈 나머지는 항상 주기를 가진다. 이를 피사노 주기(Pisano Period)라 한다.)
1000000을 나눈 나머지를 한다는 가정하에 1500000번을 주기로 똑같은 값이 주어진다.
그러므로 size를 받아서 pisano로 나눈 나머지의 위치만 구해주면 되는 간단한 문제였다.
피사노 주기를 알고 있다는 가정하에..
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int pisano = 1500000;
long size = Long.parseLong(br.readLine()) % pisano;
long[] num = new long[pisano + 1];
num[0] = 0;
num[1] = 1;
for(int i = 2; i <= pisano; i++) {
num[i] = (num[i - 1] + num[i - 2]) % 1000000;
}
System.out.print(num[(int)size]);
}
}
728x90
반응형
'백준 > 1 - 5000' 카테고리의 다른 글
[백준] 1786번 : 찾기(JAVA) (0) | 2021.08.26 |
---|---|
[백준] 1003번 : 피보나치 함수(JAVA) (0) | 2021.08.23 |
[백준] 1213번 : 팰린드롬 만들기(JAVA) (0) | 2021.08.16 |
[백준] 1912번 : 연속합(JAVA) (0) | 2021.08.07 |
[백준] 4889번 : 안정적인 문자열(JAVA) (0) | 2021.07.30 |
댓글