Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

csct3434

[level 2] 숫자 카드 나누기 - 135807 본문

프로그래머스

[level 2] 숫자 카드 나누기 - 135807

csct3434 2024. 2. 29. 03:30

문제 링크

 

프로그래머스

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

programmers.co.kr

import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

class Solution {

    public int solution(int[] arrayA, int[] arrayB) {
        Arrays.sort(arrayA);
        Arrays.sort(arrayB);

        List<Integer> aDivs = getDivisiors(arrayA[0]);
        List<Integer> bDivs = getDivisiors(arrayB[0]);

        int aOfArrayA = calcA(aDivs, arrayA, arrayB);
        int aOfArrayB = calcA(bDivs, arrayB, arrayA);

        return Math.max(aOfArrayA, aOfArrayB);
    }

    private List<Integer> getDivisiors(int number) {
        LinkedList<Integer> divs = new LinkedList<>();
        for (int i = number; i >= 1; i--) {
            if (number % i == 0) {
                divs.add(i);
            }
        }
        return divs;
    }

    private int calcA(List<Integer> divs, int[] divisibleNumbers, int[] indivisibleNumbers) {
        for (Integer div : divs) {
            if (checkDivisible(divisibleNumbers, div) && checkIndivisible(indivisibleNumbers, div)) {
                return div;
            }
        }
        return 0;
    }

    private boolean checkDivisible(int[] array, int div) {
        for (int number : array) {
            if (number % div != 0) {
                return false;
            }
        }
        return true;
    }

    private boolean checkIndivisible(int[] array, int div) {
        for (int number : array) {
            if (number % div == 0) {
                return false;
            }
        }
        return true;
    }
}