철수와 영희가 숫자카드를 받는데
위 두 조건 중 하나를 만족하는 양의 정수 a를 구하려 한다.
철수가 받은 카드배열 arrayA와
영희가 받은 카드배열 arrayB가 주어진다.
최대공약수를 구해서 풀었습니다.
A배열의 최대공약수(gcdA), B배열의 최대공약수(gcdB)를 구한 후
B배열을 돌면서 gcdA로 나눠지는 수가 있는지 확인, 있다면 gcdA는 0
A배열을 돌면서 gcdB로 나눠지는 수가 있는지 확인, 있다면 gcdB는 0
gcdA와 gcdB 중 큰 값을 출력
import java.util.*;
class Solution {
public int solution(int[] arrayA, int[] arrayB) {
int answer = 0;
int leng = arrayA.length;
int gcdA = arrayA[0];
int gcdB = arrayB[0];
for(int i = 1; i < leng; i++){
gcdA = getGCD(arrayA[i], gcdA);
gcdB = getGCD(arrayB[i], gcdB);
}
if(gcdA != 0){
for(int b : arrayB){
if(b % gcdA == 0) {
gcdA = 0;
break;
}
}
}
if(gcdB != 0){
for(int a : arrayA){
if(a % gcdB == 0){
gcdB = 0;
break;
}
}
}
answer = Math.max(gcdA, gcdB);
return answer;
}
private int getGCD(int a, int b){
int n = 0;
int tmp = 0;
if(a < b){
tmp = a;
a = b;
b = tmp;
}
while(b != 0){
n = a % b;
a = b;
b = n;
}
return a;
}
}
여러 수의 최대공약수를 구하는 방법과 최대공약수의 성질을 많이 배울 수 있었던 문제였다.
Level2는 아니고 Level2.5정도 되는거 같다…