알고리즘

백준 11726번 2Xn타일링 (JAVA)

박카스마시며코딩 2023. 9. 1. 20:57

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

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

 

저는 DP를 이용해 문제를 해결하였습니다.

일단 전화식은 f(n) = f(n-1) + f(n-2)로 구하였습니다.

n번째 칸에 세로로 2인 직사각형을 넣으면 f(n-1)값이 되고, 가로로 2인 직사각형 2개를 넣으면 f(n-2)값이 되기 때문입니다.

이 값을 DP에 저장하며 문제를 해결하였습니다. 

 

package BOJ.dp;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class BOJ_11726 {
    private static final int NOT_VALID = -1;
    private static final int LIMIT = 10_007;
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] dp = new int[1001];
        Arrays.fill(dp,NOT_VALID);
        dp[1] = 1;
        dp[2] = 2;
        int result = cal(n,dp);
        System.out.println(result);
    }

    private static int cal(int n, int[]dp) {
        if(dp[n] != NOT_VALID){
            return dp[n];
        }
        return dp[n] = (cal(n-1,dp) + cal(n-2,dp))% LIMIT;
    }
}

'알고리즘' 카테고리의 다른 글

백준 28353번 고양이 카페 (JAVA)  (0) 2023.09.03
백준 25195번 Yes or yes (JAVA)  (0) 2023.09.02
백준 10917번 Your life (JAVA)  (0) 2023.08.31
백준 1662번 압축 (JAVA)  (0) 2023.08.30
백준 14677번 병약한 윤호 (JAVA)  (0) 2023.08.29