알고리즘/백준

[백준] 10448번 유레카 이론

JeongHyeon 2018. 1. 24. 22:24

문제

https://www.acmicpc.net/problem/10448

풀이과정

처음에는 이걸 어떻게 하지 ? 라는 생각을 했지만 시간제한을 보니 그냥 for문으로 다 검사해도 될 것 같아서 쉽게 해결했다. 비교적 어렵지 않은 완전탐색 문제이다.

소스코드

#include <iostream>
#include <vector>

using namespace std;

int arr_T[50];

void init()
{
    for (int i = 1; i <= 50; i++)
    {
        arr_T[i - 1] = i*(i + 1) / 2;
        //cout << arr_T[i - 1] << endl;
    }
}

bool solution(int num)
{
    for (int i = 0; i < 50; i++)
    {
        for (int j = 0; j < 50; j++)
        {
            for (int k = 0; k < 50; k++)
            {
                int sum = arr_T[i] + arr_T[j] + arr_T[k];
                if (sum == num)
                    return true;
            }
        }
    }

    return false;
}

int main()
{
    ios::sync_with_stdio(false);

    int T,K;

    cin >> T;

    init();

    for (int i = 0; i < T; i++)
    {
        cin >> K;

        if (solution(K)) cout << 1 << "\n";
        else cout << 0 << "\n";
    }


    return 0;
}