본문 바로가기

Archived(CSE Programming)/알고리즘(C++)

프로그래머스_2*n 타일링

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

 

코딩테스트 연습 - 2 x n 타일링 | 프로그래머스

가로 길이가 2이고 세로의 길이가 1인 직사각형모양의 타일이 있습니다. 이 직사각형 타일을 이용하여 세로의 길이가 2이고 가로의 길이가 n인 바닥을 가득 채우려고 합니다. 타일을 채울 때는 다음과 같이 2가지 방법이 있습니다. 타일을 가로로 배치 하는 경우 타일을 세로로 배치 하는 경우 예를들어서 n이 7인 직사각형은 다음과 같이 채울 수 있습니다. 직사각형의 가로의 길이 n이 매개변수로 주어질 때, 이 직사각형을 채우는 방법의 수를 return 하는 s

programmers.co.kr

기본적인 DP 문제이다.

Level 3의 카카오 추석 트래픽 문제를 풀다가 멘탈이 나가서 쉬어갈 겸 쉬운 문제를 찾고 있었다.

그러다 Level 3에 2*n 타일링 문제가 있길래 풀어봤다.

기본적인 DP 문제로 점화식을 세우면 손쉽게 해결이 가능하였다.

#include <string>
#include <vector>
#include <algorithm>
using namespace std;

// DP로 vector에서 이전 값에다 추가할 수 있는 경우의 수 더해주기
int solution(int n) {
    int answer = 0;
    vector<long long> v(n+1,0);
    v[1]=1, v[2]=2; // 초기화
    for(int i=3;i<=n;i++){
        // -1 경우와 -2 경우의 수 더해주기
        v[i] = (v[i-1] + v[i-2]) % 1000000007;;
    }
    answer = v[n];
    return answer;
}

'Archived(CSE Programming) > 알고리즘(C++)' 카테고리의 다른 글

프로그래머스_타일 장식물  (0) 2019.11.16
프로그래머스_N으로 표현  (0) 2019.11.16
백준 17144_미세먼지 안녕!  (0) 2019.10.19
백준 14502_연구소  (0) 2019.10.19
백준 15683_감시  (0) 2019.10.17