Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 크루스칼
- 스택
- BFS
- SSAFY
- dfs
- Knapsack
- 시뮬레이션
- 빠른 입출력
- lis
- 문자열
- 비트마스크
- 조합
- 중복 순열
- 큐
- 세그먼트 트리
- 피보나치 수
- BeautifulSoup
- 재귀
- 클래스
- 분할 정복
- 우선순위 큐
- 순열
- 완전 탐색
- 그리디
- DP
- 링크드리스트
- 백트래킹
- 메모리풀
- 이분 탐색
- MST
Archives
- Today
- Total
작심 24/7
[백준] 10448번 유레카 이론 본문
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