숫자 카드 나누기

LJM·2023년 8월 29일
0

programmers

목록 보기
87/92

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;
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글