반응형
문제
https://www.acmicpc.net/problem/10448
10448번: 유레카 이론
문제 삼각수 Tn(n ≥ 1)는 [그림]에서와 같이 기하학적으로 일정한 모양의 규칙을 갖는 점들의 모음으로 표현될 수 있다. [그림] 자연수 n에 대해 n ≥ 1의 삼각수Tn는 명백한 공식이 있다. Tn = 1 + 2 + 3 + ... + n = n(n+1)/2 1796년, 가우스는 모든 자연수가 최대 3개의 삼각수의 합으로 표현될 수 있다고 증명하였다. 예를 들어, 4 = T1 + T2 5 = T1 + T1 + T2 6 = T2 + T2 or 6 = T
www.acmicpc.net
풀이
K보다 작은 삼각수를 구해서 모두 구해서 합으로 표현가능한지 확인한다. 1000보다 작은 삼각수의 수는 생각보다 많지 않아서 가능하다.
1. K보다 작은 삼각수를 구한다
2. 3개씩 더하면서 합이 맞는지 확인한다.
코드
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#include <iostream>
#include <vector>
using namespace std;
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
int T;
cin >> T;
while (T--)
{
int K;
cin >> K;
vector<int> v;
int i = 1;
int plus = 2;
while (i < K)
{
v.push_back(i);
i += plus++;
}
i = 0;
int j = 0, k = 0;
int num1 = v[i], num2 = v[j], num3 = v[k];
int result = 0;
while (true)
{
if (num1 + num2 + num3 == K)
{
result = 1;
break;
}
k++;
if (k == v.size())
{
k = 0;
j++;
if (j == v.size())
{
j = 0;
i++;
if (i == v.size())
break;
}
}
num3 = v[k];
num2 = v[j];
num1 = v[i];
}
cout << result << '\n';
}
return 0;
}
|
cs |
반응형
'BOJ' 카테고리의 다른 글
백준 1629 - 곱셈 (0) | 2019.05.16 |
---|---|
백준 9465 - 스티커 (0) | 2019.05.14 |
백준 1463 - 1로 만들기 (0) | 2019.05.12 |
백준 3085 - 사탕 게임 (0) | 2019.05.12 |
백준 1912 - 연속합 (0) | 2019.05.07 |