문제풀이/프로그래머스

[프로그래머스] 2 x n 타일링

Hyeon-Uk 2021. 3. 21. 23:00
반응형

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

 

코딩테스트 연습 - 2 x n 타일링

가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는

programmers.co.kr


 

-풀이-

dp로 풀면 된다. dp[i]=j 는 가로의 길이가 i일때, 놓을 수 있는 경우의 수를 j라고 하자

그럼 점화식은 dp[i]=dp[i-1]+dp[i-2]가 된다.

위의 그림처럼 i=4일땐, i가 3인 경우에 세로로 세운 작대기를 붙인 경우와, i가 2인 경우에 가로로 2개를 쌓은 경우의 수를 더해주면 된다. 따라서

dp[i]=dp[i-1]+dp[i-2]가 된다.

 

-시간복잡도-

n까지 탐색하므로 O(N)이 된다.

 

-코드-

#include <string>
#include <vector>
#define MOD 1000000007
using namespace std;

int dp[60001];

int solution(int n) {
    int answer = 0;
    
    dp[1]=1;
    dp[2]=2;
    
    for(int i=3;i<=n;i++){
        dp[i]=(dp[i-1]+dp[i-2])%MOD;
    }
    answer=dp[n];
    
    return answer;
}

 

 

반응형