본문 바로가기
알고리즘/백준

[백준/C,C++] 1904번: 01타일

by 이민훈 2021. 3. 7.

www.acmicpc.net/problem/1904

 

1904번: 01타일

지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이

www.acmicpc.net

점화식만 찾아낸다면 정말 간단한 문제입니다. N이 0일 경우 만들 수 있는 타일의 개수는 0개입니다. 1일 경우 1개, 2일 경우 2개라고 문제에 나와 있죠. 3은 011, 100, 111로 3개입니다. 4의 경우는 5개로 문제에 나와 있습니다. 해를 쭉 나열해보면 0, 1, 2, 3, 5인데, 피보나치 수열과 굉장히 유사합니다. 작은 문제를 쌓아 큰 문제를 푸는 상향식(Bottom-up) 동적 계획법을 이용하면 쉽게 해결할 수 있습니다.

#include<iostream>

using namespace std;

#define MAX 1000001

int DP[MAX];

int tile(int n)
{
    for (int i = 0; i < 3; i++) DP[i] = i;
    for (int i = 3; i <= n; i++) DP[i] = (DP[i - 1] + DP[i - 2]) % 15746;
    return DP[n];
}

int main(void)
{
    int n; cin >> n;

    cout << tile(n) << endl;

    return 0;
}

댓글