[boj] (g5) 2133 타일 채우기

강신현·2022년 4월 20일
0

✅ DP

문제

링크

1. 문제 접근 및 해결 로직

벽의 크기 : 3xn
사용 가능한 타일 : 2x1, 1x2

  • 벽의 크기는 최소한 홀수가 되면 안된다. 왜냐하면 2칸짜리 타일 두가지를 사용하여 채워야 하기 때문에 벽의 크기가 홀수가 되면 벽을 모두 채울 수 없다.
    벽의 크기가 홀수가 되는 경우는 n이 홀수인 경우이다.

  • 타일의 최대 가로 길이가 2 이므로 다른 문제들에서 풀던대로 n-2에서 n으로 벽을 확장했다고 생각해보자 그럼 3x2 벽을 채울 수 있는 경우는 총 3가지 이다.

  • 하지만 여기서 추가로 생각해줘야 할 경우가 있다.
    벽의 세로가 3이라서 생기는 상황인데, n-4에서 n으로 벽을 확장한다고 생각해보자.
    그럼 3x4 벽을 채울 수 있는 경우는 총 11가지이다.

    여기서 체크 되어 있는 경우는 n-2에서 커버가 되는 경우들이지만 아래 두가지 경우는 커버가 되지 않는다. 따라서 n-4 부터는 2가지 경우를 추가로 세어줘야 한다.
    n-3,n-4,n-5,n-6,...
    하지만 다행인 것은 n이 홀수일 경우는 만들 수 없다고 했으므로 n-3,n-5,...들은 세지 않는다. 왜냐하면 n이 짝수이므로 n-3,n-5,...은 홀수가 된다. 따라서 이경우도 만들 수 있는 경우가 없다.

정리하면 n-2 만 3가지를 추가해주고 n-4부터 짝수들은 2가지를 추가로 세어준다.

참고 : https://dlog0518.tistory.com/40

  • 정의
    f(n)f(n) : n에서 만들 수 있는 경우의 수
  • 구하는 답
    f(n)f(n)
  • 초기값
    f(1)=0f(1)=0
    f(2)=3f(2)=3
  • 점화식
    (n%2==1) : f(n)=0f(n)=0
    (n%2==0) : f(n)=3f(n2)+2f(n4)+2f(n6)+2f(n8)+..f(n)=3*f(n-2)+2*f(n-4)+2*f(n-6)+2*f(n-8)+..

2. 코드

3. 시간 복잡도 분석

경우의 수를 모두 구하므로
O(N)O(N)

4. 문제에서 중요한 부분

DP문제는 점화식을 도출하는 것이 중요하다.
Bottm Up(반복문)으로 풀지 Top Down(재귀)으로 풀지는 선택사항

profile
땅콩의 모험 (server)

0개의 댓글