From 84a0975f7634e35d9be86113907300836beda364 Mon Sep 17 00:00:00 2001 From: HongChanUi <75023467+hcu55@users.noreply.github.com> Date: Thu, 15 May 2025 23:24:13 +0900 Subject: [PATCH] =?UTF-8?q?[250515]=20=ED=94=BC=EB=B3=B4=EB=82=98=EC=B9=98?= =?UTF-8?q?=20=EC=88=98=203(dp+pisanoPeriod),=20=EA=B3=A8=EB=93=9C=20II?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 피사노 주기(Pisano Period)를 알아야 함 #### 피사노 주기란? - 피보나치 수열을 어떤 수 M으로 나눈 나머지 수열은 언젠가는 반복되기 시작한다. 이 반복되는 최초의 주기 길이를 피사노 주기라고 부름 #### 왜 1,000,000의 피사노 주기는 1,500,000인가요? - 피사노 주기의 길이는 대략 6 * m 이며, 10^k일 경우 15 × 10^{k-1}이 됨 - 1,000,000 = 10^6 → 15 × 10^5 = 1,500,000 --- ...353\202\230\354\271\230\354\210\2303.java" | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 "hcu55/week16/\355\224\274\353\263\264\353\202\230\354\271\230\354\210\2303.java" diff --git "a/hcu55/week16/\355\224\274\353\263\264\353\202\230\354\271\230\354\210\2303.java" "b/hcu55/week16/\355\224\274\353\263\264\353\202\230\354\271\230\354\210\2303.java" new file mode 100644 index 0000000..2365d3a --- /dev/null +++ "b/hcu55/week16/\355\224\274\353\263\264\353\202\230\354\271\230\354\210\2303.java" @@ -0,0 +1,34 @@ +package hcu55.week16; + +import java.io.*; +import java.util.*; + +// 피보나치 수 3(dp+pisanoPeriod), 골드 II +public class 피보나치수3 { + static int MOD = 1_000_000; + static int PISANO = 1_500_000; + + public static void main(String[] args) throws IOException { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + + long n = Long.parseLong(br.readLine()); + int r = (int)(n % PISANO); + + System.out.println(fibo(r)); + } + + public static int fibo(int n) { + if (n == 0) return 0; + if (n == 1) return 1; + + int[] dp = new int[n + 1]; + dp[0] = 0; + dp[1] = 1; + + for (int i = 2; i <= n; i++) { + dp[i] = (dp[i - 1] + dp[i - 2]) % MOD; + } + + return dp[n]; + } +}