programmers_숫자 카드 나누기_java
2023. 5. 15. 15:13ㆍAlgorithm/Programmers
728x90
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;
int arrayLength = arrayA.length;
// 오름차순 정렬
Arrays.sort(arrayA);
Arrays.sort(arrayB);
// 각각의 최대공약수 찾기
int aGCD = arrayA[0];
int bGCD = arrayB[0];
for (int i = 1; i<arrayLength; i++){
aGCD = findGCD(arrayA[i], aGCD);
bGCD = findGCD(arrayB[i], bGCD);
}
// 조건을 만족하는 가장 큰 값 찾기
answer = Math.max(findMaxDivisor(aGCD, arrayB), findMaxDivisor(bGCD, arrayA));
return answer;
}
// 최대공약수 찾기
public int findGCD(int num1, int num2){
while (num2 != 0){
int n = num1 % num2;
num1 = num2;
num2 = n;
}
return num1;
}
// 조건 만족하는 가장 큰 정수 찾기
public int findMaxDivisor(int gcd, int[] array){
List<Integer> aGCDDivsors = findDivisors(gcd);
for (int i = 0; i<aGCDDivsors.size(); i++){
int divisor = aGCDDivsors.get(i);
boolean res = true;
for (int num : array){
if(num%divisor == 0){
res = false;
break;
}
}
if (res){
return divisor;
}
}
return 0;
}
// num의 약수 찾기 (내림차순)
public List<Integer> findDivisors(int num){
List<Integer> divisors = new ArrayList<>();
for(int i = 2; i<Math.sqrt(num); i++){
if(num%i == 0){
divisors.add(0, i);
}
}
divisors.add(0, num);
return divisors;
}
}
'Algorithm > Programmers' 카테고리의 다른 글
programmers_후보키_java (0) | 2023.05.17 |
---|---|
programmers_혼자 놀기의 달인_java (0) | 2023.05.15 |
programmers_하노이의 탑_java (0) | 2023.05.15 |
programmers_문자열 압축_java (0) | 2023.05.15 |
programmers_마법의 엘리베이터_java (0) | 2023.05.14 |