11727 - 2xN 타일링 2
D[N] = 2xN 타일을 덮는 방법의 갯수라고 점화식을 세워서 풀었다.
풀면서 발견한 나의 문제점
=> 기저 사례에 대해서 제대로 확인을 안한다는 점.
- 기저 사례를 확인 할 때는 N-2,N-1 이기 때문에 1,2 를 넣어야 한다는 점.
그리고 기저 사례는 직접 계산을 해야 한다는 점.
##################풀면서 이상했던 점######################
정답을 출력할 때, 나는 D[N]이 전역변수라 그냥 출력하면 될 줄 알았는데
저런식으로 코딩할 경우 100프로에서 실패라고 떴다.
그냥 go()함수를 출력할 경우에만 정답이라고 나왔다.
???????????????????????????????????????????????????
왜 그런지 이유를 파악해야 할 듯...
<오류 코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include<iostream> #include<string.h> using namespace std; int D[1001]; int go(int N) { if (N == 1 || N==0) { return 1; } if (D[N] != -1) { return D[N]; } D[N] = (go(N - 1) + 2 * (go(N - 2)))%10007; return D[N]; } int main() { int n; memset(D, -1, sizeof(D)); cin >> n; go(n); cout << D[n] << endl; return 0; } | cs |
##########################################################
<정답 코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include<iostream> #include<string.h> using namespace std; int D[1001]; int go(int N) { if (N == 1 || N==0) { return 1; } if (D[N] != -1) { return D[N]; } D[N] = (go(N - 1) + 2 * (go(N - 2)))%10007; return D[N]; } int main() { int n; memset(D, -1, sizeof(D)); cin >> n; cout << go(n) << endl; return 0; } | cs |
반응형