0. 문제 |
1. 아이디어 |
1) 1000이하의 삼각수들만 들어있는 배열을 따로 하나 생성.
2) 완전 탐색을 통해 주어진 수가 3개의 삼각수들의 합으로 표현될 수 있는지 판단.
2. 소스코드 |
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
35
36
37
38
39
|
#include <iostream>
#include <memory.h>
int tri[1000];
bool triangleSum(int total)
{
for (int p = 0; tri[p] != 0; p++)
{
for (int q = 0; tri[q] != 0; q++)
{
for (int r = 0; tri[r] != 0; r++)
{
int sum = tri[p] + tri[q] + tri[r];
if (total == sum) return true;
}
}
}
return false;
}
int main()
{
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
int T, index = 0;
std::cin >> T;
memset(tri, 0, sizeof(tri));
for (int i = 1; (i * i + i) / 2 < 1000; i++)
{
int sum = (i * i + i) / 2;
tri[index++] = sum;
} // tri[0]부터 순서대로 1000 이하의 삼각수들을 배열에 입력
for (int i = 0; i < T; i++)
{
int N;
std::cin >> N;
if (triangleSum(N)) std::cout << "1\n";
else std::cout << "0\n";
}
}
|
cs |
3. 결과 |
4. 피드백 |
- 벡터를 이용했다면 쓸데없는 메모리낭비를 막을 수 있었다.. 공부하자!
TO DO LIST: 벡터
'알고리즘 > BOJ' 카테고리의 다른 글
[C++] 백준 1018번 - 체스판 다시 칠하기 (0) | 2020.03.05 |
---|---|
[C++] 백준 2503번 - 숫자야구 (0) | 2020.03.04 |
[C++] 백준 3085번 - 사탕 게임 (0) | 2020.03.01 |
[C++] 백준 2231번 - 분해합 (0) | 2020.02.29 |
[C++] 백준 2309번 - 일곱 난쟁이 (0) | 2020.02.29 |