import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
//DP : 주어진 문제를 여러 개의 부분 문제들로 나누어 푼 다음, 그 결과들로 주어진 문제를 푼다.
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// StringTokenizer st = new StringTokenizer(br.readLine()," ");
// StringBuilder sb = new StringBuilder();
// int n = Integer.parseInt(br.readLine());
int n = Integer.parseInt(br.readLine());
int[] dp = new int[n+1];
dp[1] = 1;
if(n >= 2) {
dp[2] = 2;
}
for(int i=3;i<=n;i++) {
dp[i] = (dp[i-1] + dp[i-2]) 007;
}
System.out.println(dp[n]);
}
}
보면 오버플로우 나서 미리 %연산 한거잖아 ?
근데 이렇게 하게되면 경우의 수가 이상하게 되는거아님 ?..
질문 게시판 보닌깐 미리 % 연산해도 결과는 같다고 하는데 이해가안됨..
(a%c+b%c)%c=(a+b)%c가 만족함. a=xa*c+ya,b=xb*c+yb라 했을 때 (xa,xb는 정수, ya, yb는 0<=ya,yb<c를 만족하는 정수 a+b=(xa+xb)*c+ya+yb라 결국 (a%c+b%c)%c=(ya+yb)%c,(a+b)%c=((xa+xb)*c+ya+yb)%c=(ya+yb)%c이기 때문. 이거는 곱셈에서도 성립함.
오우.. 답변 고맙 동일한 이유가 있었구나.. 수학적으로 약해서 몰랐나보다 ㄳㄳㄳ
이해 하지말고 그냥 이렇다는거만 알고 넘어가야할듯.. ㄷㄷ
수학을 다 까먹어서 그런지 이런거 볼때마다 정수론 공부해야하나 고민됨