본문 바로가기

알고리즘/BOJ

11727번

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, -1sizeof(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, -1sizeof(D));
    cin >> n;
 
 
    cout << go(n) << endl;
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

10844번  (0) 2017.11.15
9095번  (0) 2017.11.14
11726번  (0) 2017.11.14
1463번  (0) 2017.11.14
2445번  (0) 2017.11.12