반응형
-내 생각
문제의 이해는 간단했다. 점화식을 찾는 것이 익숙하지 않아서 1부터 증가하면서 경우의 수를 찾아보았다. n이 1일 때 1, 2일 때 2, 3일 때 3, 4일 때 5, 5일 때 8.... 이 경우를 보면 피보나치 수열이라는 것을 알 수 있었다. 즉 점화식을 세워보면 dp [n] = dp [n-1] + dp [n-2]가 된다. 그러나 피보나치수열은 46번째 숫자부터 int의 범위를 넘어서기 때문에 dp에 저장하는 값을 미리 15746의 나머지로 저장해야 한다고 한다.
-해법
import java.util.*;
public class Main {
static int n;
static int dp[]; // 메모이제이션
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
dp = new int[1000001];
dp[0] = 1;
dp[1] = 2;
dp[2] = 3;
for(int i=3;i<=n;i++) {
dp[i] = dp[i-1] + dp[i-2]; // 점화식
dp[i] %= 15746; // int형 범위를 초과하기 때문에 미리 나눠준 후 저장
}
System.out.println(dp[n-1]);// 0번 인덱스부터 사용하기 때문에 -1 후 출력
}
}
반응형