출처: https://bumcrush.tistory.com/182 [맑음때때로 여름]
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이 워낙 커서 어느 때든 상관 없을 것이라 생각했는데 아니었다. 항상 확실하고 안전한 방법을 선택하는 것이 좋겠다.
백준 11052 카드 구매하기(dynamic programming) (0) | 2020.04.19 |
---|---|
백준 11727 2×n 타일링 2(dynamic programming) (0) | 2020.04.18 |
백준 1003 피보나치 함수(dynamic programming) (0) | 2020.04.17 |
백준 9095 1, 2, 3 더하기(dynamic programming) (0) | 2020.04.17 |
백준 1065 한수(brute force) (0) | 2020.04.14 |
댓글 영역