1. 문제 풀이 아이디어
- 정렬한 후 최소값 중 큰 값부터 2까지 계산하면 문제를 해결할 수 있다.
2. 나의 정답 코드
class Solution {
public int solution(int[] arrayA, int[] arrayB) {
Arrays.sort(arrayA);
Arrays.sort(arrayB);
int max = Math.max(arrayA[0], arrayB[0]);
for (int i = max; i > 1; i--) {
boolean check = true;
for (int j = 0; j < arrayA.length; j++) {
if (arrayA[j] % i != 0) {
check = false;
break;
}
}
if (check) {
for (int j = 0; j < arrayB.length; j++) {
if (arrayB[j] % i == 0) {
check = false;
break;
}
}
if (check) {
return i;
}
}
check = true;
for (int j = 0; j < arrayB.length; j++) {
if (arrayB[j] % i != 0) {
check = false;
break;
}
}
if (check) {
for (int j = 0; j < arrayA.length; j++) {
if (arrayA[j] % i == 0) {
check = false;
break;
}
}
if (check) {
return i;
}
}
}
return 0;
}
}
3. 정리
- 두 배열을 정렬한 뒤, 최소값 중 더 큰 값을
max
에 저장한다.
max
부터 2까지 반복하며,check
변수를 사용해 다음 조건을 검사한다.i
가arrayA
의 모든 요소를 나누어 떨어뜨리며, 동시에arrayB
의 어떤 요소도 나누어 떨어뜨리지 않는 경우- 또는,
i
가arrayB
의 모든 요소를 나누어 떨어뜨리며, 동시에arrayA
의 어떤 요소도 나누어 떨어뜨리지 않는 경우
- 이러한 조건을 만족하는
i
를 찾으면 반환하고, 찾지 못하면0
을 반환한다.
Share article