알고리즘 :: 큰돌 :: Chapter 7 - DP :: 백준 1904번 01타일

Embedded June·2023년 10월 7일
0

문제

문제 링크

해설

  • 00 또는 1 타일만 사용할 수 있는 상황입니다.
  • DP[N]을 N개의 타일을 놓을 수 있는 최대 경우의 수라고 정의합시다.
    • N - 2개의 타일을 놓았을 때, 00 타일을 놓는다면, N개의 타일을 놓을 수 있습니다.
    • N - 1개의 타일을 놓았을 때, 1 타일을 놓는다면, N개의 타일을 놓을 수 있습니다.
    • 즉, DP[N]DP[N - 2] + DP[N - 1]라는 점화식으로 나타낼 수 있습니다.
  • 이때, 문제 조건에 따라 15,746으로 나눈 나머지를 구해야하므로, 매 점화식 계산마다 해당 상수로 모듈라연산을 수행합니다.

코드

#include <bits/stdc++.h>
using namespace std;
constexpr int MOD = 15'746;

int N, DP[1'000'001];

int main() {
	cin.tie(0)->sync_with_stdio(0);
	
	cin >> N;
	
	DP[1] = 1; DP[2] = 2;
	for (int i = 3; i <= N; ++i) DP[i] = (DP[i - 2] + DP[i - 1]) % MOD;
	
	cout << DP[N];
}

소스코드 링크

결과

profile
임베디드 시스템 공학자를 지망하는 컴퓨터공학+전자공학 복수전공 학부생입니다. 타인의 피드백을 수용하고 숙고하고 대응하며 자극과 반응 사이의 간격을 늘리며 스스로 반응을 컨트롤 할 수 있는 주도적인 사람이 되는 것이 저의 20대의 목표입니다.

0개의 댓글