처음에는 하나씩 증가시키려다가 당연히 시간초과가 날 것 같아서, 가로 두 칸짜리 블록의 개수에 따라서 직접 경우의 수를 구하고 답을 다 더하도록 코드를 짜봤다.
그런데도 계속 오답이 떠서 그 방법도 포기하고 개수를 하나하나 세어보니 증가하는 수들 사이에서 피보나치 규칙을 찾을 수 있었다. 그래서 dp
배열을 선언하고 MOD
연산도 해서 반복문으로 값을 저장하도록 했다.
규칙만 찾으면 쉽게 풀 수 있었을텐데, 규칙을 찾기 전까지 삽질을 꽤 했던 문제였다.
class Solution {
private static final int MOD = 1000000007;
private static int[] dp = new int[60001];
public int solution(int n) {
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; i++) dp[i] = (dp[i - 1] + dp[i - 2]) % MOD;
return dp[n];
}
}