본문 바로가기

프로그래머스

[프로그래머스] 숫자 카드 나누기 [자바]

 

 


https://school.programmers.co.kr/questions/40997

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

※. arrayA, arrayB의 최대공약수를 구한다.

 

※. 최대공약수가 다른 배열의 약수인지 확인한다.

(arrayA의 최대공약수 = arrayA의 모든 원소 중 가장 큰 약수 = 조건에 맞는 수 중에 이보다 큰 수는 없다.)

(arrayA의 최대공약수가 arrayB의 약수이다 = 최대공약수가 18이라면 [1,2,3,6,9,18] 모든 약수가 arrayB의 약수 = 답은 0)

 

 


class Solution {
    public int solution(int[] arrayA, int[] arrayB) {
        int answer = 0;
        int a = arrayA[0];
        int b = arrayB[0];
        for(int i = 1; i < arrayA.length; i++) {
            if(arrayA[i] % a == 0) continue;
            int max = Math.max(arrayA[i] , a);
            int min = Math.min(arrayA[i], a);
            a = gcd(max, min);
         }
        for(int i = 1; i < arrayB.length; i++) {
            if(arrayB[i] % b == 0) continue;
            int max = Math.max(arrayB[i] , b);
            int min = Math.min(arrayB[i], b);
            b = gcd(max, min);
        }
        for(int i : arrayB) {
            if(i % a == 0) {
                a = 0;
                break;
            }
        }
        for(int i : arrayA) {
            if(i % b == 0) {
                b = 0;
                break;
            }
        }
        answer = Math.max(a,b);
        return answer;
    }
    static int gcd(int a, int b) {
        if(b == 0) return a;
        return gcd(b, a%b);
    }
}