원본 : https://school.programmers.co.kr/learn/courses/30/lessons/135807
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
class Solution {
public int solution(int[] arrayA, int[] arrayB) {
Set<Integer> divideSetA = new HashSet<>();
Set<Integer> divideSetB = new HashSet<>();
Arrays.sort(arrayA);
Arrays.sort(arrayB);
for (int divide = 2; divide <= arrayA[0]; divide++) {
if (arrayA[0] % divide == 0) {
divideSetA.add(divide);
}
}
for (int divide = 2; divide <= arrayB[0]; divide++) {
if (arrayB[0] % divide == 0) {
divideSetB.add(divide);
}
}
Set<Integer> removeSetA = new HashSet<>();
Set<Integer> removeSetB = new HashSet<>();
for (int i = 1; i < arrayA.length; i++) {
for (int divide : divideSetA) {
if (arrayA[i] % divide != 0) {
removeSetA.add(divide);
}
}
for (int divide : divideSetB) {
if (arrayB[i] % divide != 0) {
removeSetB.add(divide);
}
}
}
for (int remove : removeSetA) {
divideSetA.remove(remove);
}
for (int remove : removeSetB) {
divideSetB.remove(remove);
}
int max = 0;
max = getMax(arrayB, divideSetA, max);
max = getMax(arrayA, divideSetB, max);
return max;
}
private int getMax(int[] array, Set<Integer> divideSet, int max) {
for (int divide : divideSet.stream().sorted((o1, o2) -> o2 - o1).collect(Collectors.toList())) {
int cnt = 0;
for (int num : array) {
if (num % divide == 0) {
break;
} else {
cnt++;
}
}
if (cnt == array.length) {
max = Math.max(max, divide);
break;
}
}
return max;
}
}
테이블 해시 함수 (연습문제) (0) | 2023.01.02 |
---|---|
크기가 작은 부분 문자열 (연습문제) (0) | 2023.01.02 |
디펜스 게임 (연습문제) (0) | 2022.12.12 |
귤 고르기 (연습문제) (0) | 2022.12.09 |
점 찍기 (연습문제) (0) | 2022.12.09 |
댓글 영역