728x90
public class Main {
static int answer = 0;
public static void main(String args[]) throws Exception
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int testcase = Integer.parseInt(br.readLine());
for(int i = 0 ; i < testcase ; i++ )
{
long t = Long.parseLong(br.readLine()); // 삼각수 t를 받아오고 판별한다.
// 조건 1.삼각수 세개로 표현한다. 2. 삼각수가 다 같을 수도 있다.
checkthreenumber(0, t, 0);
sb.append(answer+"\n");
answer = 0;
}
System.out.print(sb);
br.close();
}
public static void checkthreenumber(int check, long num, long sum) // num은 판별할 숫자, sum은 합
{
if(check >= 3 )
{
if(check == 3 && sum == num)
{
//System.out.println("check = " + check + " t = " + num + " sum = "+ sum );
answer =1;
}
if(answer == 1)
return;
return;
}
for(long i = 1 ; i <= (num-1-1) ; i++)
{
if(checkeureka(i))
{
if(answer == 1) // 이 조건을 넣은 이유는 삼각수의 세개의 합을 구했는데도 재귀를 계속 돌기 때문에 찾았다면 멈추는 것이다.
return;
checkthreenumber(check+1, num, sum+i);
}
}
}
public static boolean checkeureka(long eurekanum) // 삼각수인지 체크를 한다.
{
long t = 1; // n(n+1)/2
long n = 1;
while(t <= eurekanum)
{
if(t == eurekanum)
return true;
else
{
n++;
t = (n * (n+1)) /2 ;
}
}
return false;
}
}
728x90
'코딩 테스트' 카테고리의 다른 글
백준 2231번 분해합(자바,java,JAVA) (0) | 2023.01.11 |
---|---|
백준 15740번 A+B - 9(자바,java,JAVA) (0) | 2023.01.11 |
백준 1260번 DFS와 BFS(자바,java,JAVA) (0) | 2023.01.11 |
백준 18429번 근손실(자바,java,JAVA) (0) | 2023.01.11 |
백준 1406번 에디터(자바,java,JAVA) (0) | 2023.01.11 |