반응형
간단한 dp문제였습니다.
풀이방법
1. 00타일 : 길이 2
1타일 : 길이 1 인 정보를 가지고 있습니다.
길이[i-1]인 타일을 만들 수 있는 경우의 수 = 다음에 1타일을 연결하면 길이 i가 됩니다. => 1타일사용
길이[i-2]인 타일을 만들 수 있는 경우의 수 = 다음에 00타일을 연결하면 길이 i가 됩니다. => 00타일사용
따라서 길이 i인 타일을 만들 수 있는 경우의 수 = 길이[i-1]인 타일을 만들 수 있는 경우의 수 + 길이[i-2]인 타일을 만들 수 있는 경우의 수 입니다.
2. %(modula)연산 분배법칙이 성립하여 + 뒤 마지막에만 15746을 나누면 답이 됩니다.
Code
#include <iostream>
#define ll long long
using namespace std;
int n;
ll d[1000001] = {0,1,2,};
int main(){
cin >> n;
for(int i = 3; i <= n; i++)
d[i] = (d[i-1] + d[i-2]) % 15746;
cout << d[n] << '\n';
}
'Algorithm > DP(Dynamic Programing)' 카테고리의 다른 글
(C++) - 프로그래머스(연습문제) : 3 x n 타일링 (2) | 2021.02.15 |
---|---|
(C++) - 백준(BOJ) 9625번 : BABBA 답 (0) | 2021.02.07 |
(C++) - 백준(BOJ) 13703번 : 물벼룩의 생존확률 답 (0) | 2020.09.25 |
(C++) - 백준(BOJ) 14720번 : 우유축제 답 (0) | 2020.09.25 |
(C++) - 백준(BOJ) 10653번 : 마라톤 2 답 (0) | 2020.09.25 |