코딩테스트/BOJ
DP > 2xn 타일링(11726번)
의정부핵꿀밤
2021. 8. 27. 14:47
728x90
하씨 이것도 했던건데...
대체 강의를 어케 들었던게냐... 코테를 너무 쉬었던건가,,,
암튼 다시해봄!!
이것도 쉬워서 탑다운, 바텀업 둘다 했어!
풀이
여기서도 앞에서 풀었던 문제랑 똑같아!
D[n]이 2*n 사각형을 만드는 방법의 수를 의미해!
그럼 뭐겠어!
d[0]=0, d[1]=1, d[2]=2겠지?
이거 먼저 초기화하고 top down은 재귀로, bottom up은 n=3일떄부터 반복문으로 구현하면 되는거야!
Top-down
#include <iostream>
#define MAX 1001
using namespace std;
int d[MAX];
int go(int n){
if(d[n]!=0) return d[n];
d[n]=(go(n-1)+go(n-2))%10007;
return d[n];
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
d[0]=0;
d[1]=1;
d[2]=2;
printf("%d\n", go(n));
return 0;
}
bottom-up
#include <iostream>
#define MAX 1001
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n;
int d[MAX]={0, };
cin >> n;
d[0]=0;
d[1]=1;
d[2]=2;
for(int i=3; i<=n; i++)
{
d[i] = (d[i-1] + d[i-2])%10007;
}
printf("%d\n",d[n]%10007);
return 0;
}
맞다 그리고 잊고 있었는데
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
이거 추가해두면 c++ 성능 좋아진다고 했어!
앞으로 코테 연습할때 헤더 추가하듯 추가하자!
728x90