💡Problem Solving/Programmers

[프로그래머스] 2 x n 타일링 (Java)

gom20 2021. 10. 29. 16:52

문제

https://programmers.co.kr/learn/courses/30/lessons/12900

 

코딩테스트 연습 - 2 x n 타일링

가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는

programmers.co.kr

 

풀이

DP 방식으로 풀 수 있다. 코드는 정말 간단한데 점화식을 세우는 게 쉽지 않다.

타일이 가로로 끝나는 것과 세로로 끝나는 것을 분류해보면 아래와 같다. 

DP[i] = DP[i-1] + DP[i-2]

가로길이가 i일 때, 타일링의 경우의 수는 = i-1의 경우의 수와 i-2의 경우의 수를 합한 것이다. 

i-1의 경우의 수에서 세로 타일을 붙임

i-2의 경우의 수에서 가로 타일을 붙임

 

소스코드

class Solution {
    public int solution(int n) {
        int answer = 0;
        int[] dp = new int[n+1];
        dp[1] = 1;
        dp[2] = 2;
        for(int i = 3; i <= n; i++){
            dp[i] = (dp[i-1] + dp[i-2])%1000000007;
        }
        return dp[n];
    }
}