[프로그래머스] Level 3 2xn 타일링 (JAVA)

Jiwoo Kim·2021년 2월 22일
0

알고리즘 정복하기

목록 보기
26/85
post-thumbnail
post-custom-banner

문제


풀이

처음에는 하나씩 증가시키려다가 당연히 시간초과가 날 것 같아서, 가로 두 칸짜리 블록의 개수에 따라서 직접 경우의 수를 구하고 답을 다 더하도록 코드를 짜봤다.
그런데도 계속 오답이 떠서 그 방법도 포기하고 개수를 하나하나 세어보니 증가하는 수들 사이에서 피보나치 규칙을 찾을 수 있었다. 그래서 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];
    }
}
post-custom-banner

0개의 댓글