Judge

Programmers - 2 x n 타일링

깡구_ 2022. 6. 24. 11:16

title: Programmers - 2 x n 타일링
date: 2022-06-21
tags:

  • Algorithm
  • DP




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


문제 요약

1x2 타일을 2xn 공간에 배치하는 모든 경우의 수를 구한다.


문제 풀이

전형적인 DP 입문 문제이다. n >= 3 일때, n번째 경우의 수는 n-2번째의 배치에서 가로로 배치하는 경우의 수와 n-1번째의 배치에서 세로로 배치하는 경우의 수의 합이다.
이전 두 단계의 값만 참조하기 때문에 과한 메모리를 할당할 필요 없이 길이 3의 배열만 있으면 된다.
n <= 3일 때는 연산 없이 바로 저장한 값을 return하고, n > 3 일 때 (n-3)번 DP 계산을 해준다. 계산 이후 배열의 마지막 element의 값이 정답이다.


프로그램

#include <string>
#include <vector>

using std :: vector ;
using std :: string ;

int solution ( int n )
{
    int irgDP [ 3 ] = { 1 , 2 , 3 } ;



    if ( n <= 3 )
        return irgDP [ n - 1 ] ;

    for ( int i = 3 ; i < n ; ++i )
    {
        irgDP [ 0 ] = irgDP [ 1 ] ;
        irgDP [ 1 ] = irgDP [ 2 ] ;
        irgDP [ 2 ] = ( irgDP [ 0 ] + irgDP [ 2 ] ) % 1000000007 ;
    }


    return irgDP [ 2 ] ;
}