https://school.programmers.co.kr/learn/courses/30/lessons/135807#
풀긴했는데 넘 지저분 하네;;
import java.util.*;
class Solution {
public int solution(int[] arrayA, int[] arrayB) {
int answer = 0;
Queue<Integer> que = new PriorityQueue<>();
int first = arrayA[0];
int agcd = first;
if(arrayA.length > 1)
{
for(int i = 1; i < arrayA.length; ++i)
{
int b = arrayA[i];
que.add(gcd(first, b));
}
agcd = que.poll();
}
que.clear();
first = arrayB[0];
int bgcd = first;
if(arrayB.length > 1)
{
for(int i = 1; i < arrayB.length; ++i)
{
int b = arrayB[i];
que.add(gcd(first, b));
}
bgcd = que.poll();
}
System.out.println(agcd+","+bgcd);
if(agcd != 1 && bgcd != 1)
{
boolean check = true;
if(agcd < bgcd)
{
for(int a : arrayA)
{
if(a%bgcd==0)
{
check = false;
break;
}
}
if(!check)
return 0;
}else
{
for(int b : arrayB)
{
if(b%agcd==0)
{
check = false;
break;
}
}
if(!check)
return 0;
}
answer = Math.max(agcd, bgcd);
}
else if(agcd != 1 && bgcd == 1)
{
boolean check = true;
for(int b : arrayB)
{
if(b%agcd==0)
{
check = false;
break;
}
}
if(check)
answer = agcd;
else
return 0;
}
else if(bgcd != 1 && agcd == 1)
{
boolean check = true;
for(int a : arrayA)
{
if(a%bgcd==0)
{
check = false;
break;
}
}
if(check)
answer = bgcd;
else
return 0;
}
return answer;
}
public int gcd(int a, int b)
{
if(b > a)
{
int temp = b;
b = a;
a = temp;
}
if(a%b==0)
return b;
//System.out.println(a+","+b);
int r = 1;
while(r!=0)
{
r = a%b;
if(r==0)
break;
a = b;
b = r;
}
//System.out.println(a+","+b+","+r);
return b;
}
}