[백준/C++]#11727 - 2xn 타일링2
2021. 1. 18. 18:12ㆍ필요/코딩테스트(백준)
풀이
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
int D[1001];
D[1]=1, D[2]=3;
for (int i=3; i<=n; i++) { //n의 크기에 따라 반복
D[i] = D[i-1] + 2*D[i-2]; //값을 배열에 저장
D[i] = D[i] % 10007;
}
cout << D[n];
return 0;
}
개념
지난번에 푼 #11726의 2번째 버전이다.
이번에도 Bottom-Up 방식으로 순환호출을 사용하지 않고, 반복문을 사용해 문제를 해결했다.
이 방식이 코드를 해석할 때 좀 더 직관적인 것 같다.
풀이
2xn (ver.2)의 타일링 경우의 수는 D[n]이다. 그리고 D[n]은 D[n-1] +2*D[n-2]이다.
지난 문제와 달라진 점은, 2x1 2개 대신 2x2가 올 수 있다는 것이다.
D[n-1]에 1x2를 더해주는 경우는 동일하지만, D[n-2]에 2x1 2개를 더할 수도, 2x2 1개를 더할 수도 있다.
따라서 D[n-2]에 2를 곱해주면 된다.
'필요 > 코딩테스트(백준)' 카테고리의 다른 글
[백준/C++]#2193 - 이친수 (0) | 2021.01.20 |
---|---|
[백준/C++]#9095 - 1, 2, 3 더하기 (0) | 2021.01.18 |
[백준/C++]#11726 - 2xn 타일링 (0) | 2021.01.17 |
[백준/C++]#1463 - 1로 만들기 (0) | 2021.01.15 |
[백준/C++]#10820 - 문자열 분석 (0) | 2021.01.14 |