출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]

상세 컨텐츠

본문 제목

백준 11726 2×n 타일링(dynamic programming)

알고리즘

by 장동균 2020. 4. 17. 20:13

본문

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
const int divide = 10007;
int num;
long long rectangle[1001];
void makeFull()
{
    rectangle[1= 1;
    rectangle[2= 2;
    for (int i = 3; i < 1001; i++)
    {
        rectangle[i] = (rectangle[i - 1+ rectangle[i - 2]);
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    makeFull();
    cin >> num;
    cout << rectangle[num]%divide;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

^

틀린 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
const int divide = 10007;
int num;
int rectangle[1001];
void makeFull()
{
    rectangle[1= 1;
    rectangle[2= 2;
    for (int i = 3; i < 1001; i++)
    {
        rectangle[i] = (rectangle[i - 1+ rectangle[i - 2]) % divide;
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    makeFull();
    cin >> num;
    cout << rectangle[num];
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

^

맞은 코드

 

왜 첫코드가 틀린지 도무지 이해가 안 됐다. 아무리 생각해도 위 코드랑 아래 코드랑 다른게 없는거 같은데 왜 틀리지라는 생각에 많은 시간을 썼다. 그러다 num의 최댓값인 1000을 넣어봤는데 값이 다른걸 확인했다. 그래서 혹시 rectangle[1000]의 값이 long long의 범위를 (-9,223,372,036,854,775,808 to 9,223,372,036,854,775,807)
초과하나 확인해 봤더니 말도 안되게 초과한다. long long이 워낙 커서 어느 때든 상관 없을 것이라 생각했는데 아니었다. 항상 확실하고 안전한 방법을 선택하는 것이 좋겠다.

관련글 더보기

댓글 영역