Algorithm/DP

[baekjoon #11726] 2×n 타일링

간지나제 2021. 3. 23. 23:02

dp를 이해하는데 가장 기본이 되면서 중요한 문제가 아닐까 싶다.

 

dp는 기본적으로 bottom-up 방식을 선호하는데

차례차례 적다보면 규칙이 보이기 때문이다.

이게 쉽게 찾아지냐 안 찾아지냐의 차이에 따라서 dp의 난이도가 결정되는 것 같다.

 

이 문제 같은 경우는 

n-1과 n-2를 통해서 n을 찾는 문제이다.

n-1 경우에 한 개를 더 붙인 경우, n-2 경우에 두 개를 더 붙인 경우라고 가정하고 풀면

n의 경우가 나오게 되는 걸 알 수 있다.

 

실제로 n=4의 경우의 수를 그려보고

n=3과 n=2의 경우를 그려보고 막대기를 갖다댄다면 4의 경우수만큼 그릴 수 있다.

 

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        
        int[] dp = new int[n+1];
        
        dp[1] = 1;
        if(n>=2) {
            dp[2] = 2;
        }
        for(int i=3; i<=n; i++) {
            dp[i] = (dp[i-1]+dp[i-2])%10007;
        }
        
        System.out.println(dp[n]);
    }
}

 

 

 

www.acmicpc.net/problem/11726

 

11726번: 2×n 타일링

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

www.acmicpc.net

galid1.tistory.com/507

 

알고리즘 - Dynamic Programming(동적프로그래밍)이란?

Dynamic Programming(동적계획법) 이란 1. Dynamic Programming(동적계획법)이란? 큰 문제를 작은문제로 나누어 푸는 문제를 일컫는 말입니다. 동적 계획법이란 말 때문에 어떤 부분에서 동적으로 프로그래

galid1.tistory.com

 

 

'Algorithm > DP' 카테고리의 다른 글

[프로그래머스] 거스름돈  (0) 2021.03.25
[baekjoon #2225]합분해  (0) 2021.03.22