일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로젝트
- web
- binary search
- 객체지향
- 코딩테스트
- Baekjoon
- programmers
- BFS
- CSS
- 이분탐색
- Elasticsearch
- 알고리즘
- 백준
- 누적합
- 프로그래머스
- 계산기 만들기
- SpringBoot
- Algorithm
- Spring
- ES
- Generics
- 내일배움캠프
- OOP
- 구현
- Java
- parametric search
- 이분 탐색
- til
- 브루트포스
- 완전탐색
- Today
- Total
개발하는 햄팡이
[JAVA][백준 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 = T3
- 10 = T1 + T2 + T3 or 10 = T4
이 결과는 증명을 기념하기 위해 그의 다이어리에 “Eureka! num = Δ + Δ + Δ” 라고 적은것에서 유레카 이론으로 알려졌다. 꿍은 몇몇 자연수가 정확히 3개의 삼각수의 합으로 표현될 수 있는지 궁금해졌다. 위의 예시에서, 5와 10은 정확히 3개의 삼각수의 합으로 표현될 수 있지만 4와 6은 그렇지 않다.
자연수가 주어졌을 때, 그 정수가 정확히 3개의 삼각수의 합으로 표현될 수 있는지 없는지를 판단해주는 프로그램을 만들어라. 단, 3개의 삼각수가 모두 달라야 할 필요는 없다.
입력
프로그램은 표준입력을 사용한다. 테스트케이스의 개수는 입력의 첫 번째 줄에 주어진다. 각 테스트케이스는 한 줄에 자연수 K (3 ≤ K ≤ 1,000)가 하나씩 포함되어있는 T개의 라인으로 구성되어있다.
출력
프로그램은 표준출력을 사용한다. 각 테스트케이스에대해 정확히 한 라인을 출력한다. 만약 K가 정확히 3개의 삼각수의 합으로 표현될수 있다면 1을, 그렇지 않다면 0을 출력한다.
예제 입력 1
3
10
20
1000
예제 출력 1
1
0
1
풀이
일단 당장에 생각나는 풀이방법은
- K가 최소 3이상 최대 1000 이하 이므로 해당 범위 안에 있는 삼각수를 전부 구하여 배열로 저장한다.
- 삼각수를 하나하나 보면서 세개의 삼각수로 이루어 질 수 있는지 확인한다.
결국 완전 탐색을 이용해서 푸는 것인데 더 효율적으로 푸는 방법이 잘 생각이 들지 않는다..(있긴 한가?)
그래서 고민하다가 그냥 완탐 풀이로 풀었다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int[] triNum = new int[47];
for (int i = 1; i <= 46; i++) {
triNum[i] = i*(i+1)/2;
}
out: for (int i = 0; i < N; i++) {
int num = sc.nextInt();
for (int j = 1; j <= 46; j++) {
for (int k = 1; k <= 46; k++) {
for (int l = 1; l <= 46; l++) {
int sum = triNum[j] + triNum[k] + triNum[l];
if (sum == num) {
System.out.println(1);
continue out;
}
}
}
}
System.out.println(0);
}
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[JAVA][백준 3085] 사탕 게임 (2) | 2024.06.11 |
---|---|
[JAVA][백준 11068] 회문인 수 (0) | 2024.06.10 |
[JAVA][백준 11005] 진법 변환2 (1) | 2024.06.10 |
[JAVA][백준 2309] 일곱 난쟁이 (0) | 2024.06.03 |
[JAVA][백준 4948] 베르트랑 공준 (1) | 2024.04.19 |