본문 바로가기
코딩 테스트

백준 10448번 유레카이론(자바,java,JAVA)

by 주용사 2023. 1. 11.
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