프로그래머스 연습문제 숫자 카드 나누기 [JAVA] - 23년 1월 27일

Denia·2023년 1월 27일
0

코딩테스트 준비

목록 보기
144/201
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

class Solution {
    private int answer;

    public int solution(int[] arrayA, int[] arrayB) {
        answer = 0;

        Arrays.sort(arrayA);
        Arrays.sort(arrayB);

        int minA = arrayA[0];
        int minB = arrayB[0];

        List<Integer> dividersA = getDividers(minA);
        List<Integer> dividersB = getDividers(minB);

        checkMaxDivideValue(dividersA, arrayA, arrayB);
        checkMaxDivideValue(dividersB, arrayB, arrayA);

        return answer;
    }

    private void checkMaxDivideValue(List<Integer> dividers, int[] doDivideArr, int[] doNotDivideArr) {
        for (int idx = dividers.size() - 1; idx >= 0; idx--) {

            boolean doDivideFlag = true;
            int divideVal = dividers.get(idx);

            for (int arrVal : doDivideArr) {
                if (arrVal % divideVal != 0) {
                    doDivideFlag = false;
                    break;
                }
            }

            if (doDivideFlag) {
                boolean doNotDivideFlag = true;

                for (int arrVal : doNotDivideArr) {
                    if (arrVal % divideVal == 0) {
                        doNotDivideFlag = false;
                        break;
                    }
                }

                if (doNotDivideFlag) {
                    answer = Math.max(answer, divideVal);
                    return;
                }
            }
        }
    }

    List<Integer> getDividers(int n) {
        List<Integer> list = new ArrayList<>();
        for (int i = 1; i <= n; i++) {
            if (n % i == 0) {
                list.add(i);
            }
        }

        return list;
    }
}

profile
HW -> FW -> Web

0개의 댓글