패스트터틀

(Baekjoon) dp - (5) 타일 채우기 본문

Algorithm/baekjoon

(Baekjoon) dp - (5) 타일 채우기

SudekY 2019. 11. 29. 17:49

https://www.acmicpc.net/problem/2133

 

2133번: 타일 채우기

문제 3×N 크기의 벽을 2×1, 1×2 크기의 타일로 채우는 경우의 수를 구해보자. 입력 첫째 줄에 N(1 ≤ N ≤ 30)이 주어진다. 출력 첫째 줄에 경우의 수를 출력한다. 예제 입력 1 복사 2 예제 출력 1 복사 3 힌트 아래 그림은 3×12 벽을 타일로 채운 예시이다....

www.acmicpc.net

D(n) = 3*D(n-2) + 2*(D(n-4) + D(n-6) +..... + D(0))

 

 

package dp;

import java.io.IOException;
import java.util.Scanner;



public class _2133{
    static int result = 0;
    static int d[] = new int[100];
    public static int dp(int n){
        
        if(n==0)
            return 1;
        if(n==1)
            return 0;
        if(n==2)
            return 3;
        if(d[n] != 0)
            return d[n];
        result = 3*dp(n-2);

        for(int i = 4 ; i <= n ; i+=2){
            result += 2*dp(n-i);
        }        
        return d[n] = result;       
    
    }

    public static void main(String args[]) throws IOException{
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(dp(n));
        
        sc.close();

    }
}

 

홀수인경우는 구할필요없음

점화식을 잘 세우는것이 관건...

이걸 문제유형으로 외워서 푸는건지 아니면 점화식을 직관적으로 세우는사람도 있는지 의아하다.

 

 

 

 

 

 

 

백준문제풀이Github : 

https://github.com/sdk0213/baekjoon-study

 

sdk0213/baekjoon-study

solve a baekjoon question. Contribute to sdk0213/baekjoon-study development by creating an account on GitHub.

github.com

 

Comments