문제 링크입니다: https://www.acmicpc.net/problem/10448
미리 삼각수를 계산해놓은 뒤에 삼각수 세개를 이용해 만들 수 있는지 판별해주면 되는 문제였습니다.
Brute Force 방식으로 찾기 때문에 구현은 어렵지 않았습니다.
#include <iostream>
#include <vector>
using namespace std;
vector<int> eureka;
//1000보다 작은 삼각수 미리 계산
void preCalculate(void)
{
int N = 1;
while ((N)*(N + 1) / 2 < 1000)
{
eureka.push_back(N*(N + 1) / 2);
N++;
}
}
//삼각수 세개로 만들 수 있는 숫자인지 판별
bool triangleSum(int total)
{
for (int i = 0; i < eureka.size(); i++)
for (int j = 0; j < eureka.size(); j++)
for (int k = 0; k < eureka.size(); k++)
if (eureka[i] + eureka[j] + eureka[k] == total)
return true;
return false;
}
int main(void)
{
int test_case;
cin >> test_case;
preCalculate();
for (int i = 0; i < test_case; i++)
{
int total;
cin >> total;
cout << triangleSum(total) << endl;
}
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2583번 영역 구하기 (2) | 2018.07.01 |
---|---|
백준 14888번 연산자 끼워넣기 (6) | 2018.06.30 |
백준 11585번 속타는 저녁 메뉴 (0) | 2018.06.30 |
백준 11403번 경로 찾기 (0) | 2018.06.30 |
백준 5585번 거스름돈 (0) | 2018.06.30 |