작심 24/7

[백준] 10448번 유레카 이론 본문

백준

[백준] 10448번 유레카 이론

모닝수박 2020. 6. 7. 21:59
 

10448번: 유레카 이론

문제 삼각수 Tn(n ≥ 1)는 [그림]에서와 같이 기하학적으로 일정한 모양의 규칙을 갖는 점들의 모음으로 표현될 수 있다. [그림] 자연수 n에 대해 n ≥ 1의 삼각수Tn는 명백한 공식이 있다. Tn = 1 + 2 +

www.acmicpc.net

K가 3가지의 삼각수로 표현될 수 있는지 구하려면

삼각수를 먼저 구해준 후 3중 for문으로 세 삼각수의 합이 K가 되는 경우 1, 안 되는 경우 0을 출력하면 된다.

 

자연수 K의 범위가 1000까지이므로 삼각수 Tn은 T44(990)까지만 구해주고

T1에서 T44까지 세 번 돌리며 비교하면 끝

불필요한 반복을 줄이기 위해 중간 중간 break를 걸어준다.

#include <iostream>
#include <algorithm>
using namespace std;
int main() {
	int Tn[45] = { 0 };
	for (int i = 1; i < 45; i++) Tn[i] = i*(i + 1) / 2;

	int T, K;
	cin >> T;
	for (int t = 0; t < T; t++) {
		cin >> K;
		int finish = 0;
		for (int i = 1; i < 45; i++) {
			if (Tn[i] >= K) break;

			for (int j = 1; j < 45; j++) {
				if (Tn[j] >= K - Tn[i]) break;

				for (int k = 1; k < 45; k++) {
					if (Tn[k] > K - Tn[i] - Tn[j]) break;
					else if (Tn[k] + Tn[j] + Tn[i] == K) {
						cout << "1\n";
						finish = 1;
						break;
					}
				}
				if (finish == 1) break;
			}
			if (finish == 1) break;
		}
		if (finish == 0) cout << "0\n";
	}
	return 0;
}

'백준' 카테고리의 다른 글

[백준] 1182번 부분수열의 합  (0) 2020.06.08
[백준] 2503번 숫자 야구 (C++, JAVA)  (0) 2020.06.08
[백준] 2309번 일곱 난쟁이  (0) 2020.06.07
[백준] 1912번 연속합  (0) 2020.06.07
[백준] 1406번 에디터  (0) 2020.06.06
Comments