728x90
https://school.programmers.co.kr/learn/courses/30/lessons/135807
간단한 문젠데 조건을 제대로 읽지 않고 풀어서 조금 헤멨던 문제다...😥
난 요 부분 조건이 헷갈렸다
- 철수가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고 영희가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a
- 영희가 가진 카드들에 적힌 모든 숫자를 나눌 수 있고, 철수가 가진 카드들에 적힌 모든 숫자들 중 하나도 나눌 수 없는 양의 정수 a
예를 들어 철수가 [10, 17]을 갖고 영희가 [5, 20]을 가졌다고 가정해보자
그러면 철수가 가진 카드를 모두 나눌 수 있는 숫자는 없고, 영희가 가진 카드를 모두 나눌 수 있는 숫자는 [5]가 있다
이 때 애초에 철수가 가진 카드를 모두 나눌 수 있는 숫자가 없기 떄문에 위의 조건 중 1번은 성립되지 않는다
그래서 영희가 가진 카드를 모두 나눌 수 있는 숫자인 5가 철수의 카드 [10, 17]을 나눌 수 있는지 확인하면 되는데, 이 때 10은 5로 나눠지니까 답은 0이다
암튼 저게 좀 헷갈렸다
그래서 문제 풀이 방식은 다음과 같다
[문제 풀이]
- arrayA(철수)와 arrayB(영희)에 대해 각각 해당 배열을 모두 나눌 수 있는 숫자 배열을 구한다 -> getDivisors()
- 그리고 구한 숫자 배열로 반복문을 돌면서 철수와 영희의 숫자 카드 중 나눠지는 숫자가 있는지 확인하고, 없다면 그 중의 최댓값을 반환한다
- arrayA를 모두 나눌 수 있는 숫자 배열을 listA, arrayB를 모두 나눌 수 있는 숫자 배열을 listB라고 한다
- 이 때 listA와 listB의 원소는 getDivisors()에 의해 오름차순으로 정렬된 값이 들어가 있다
- 따라서 listA의 뒤의 원소(큰 숫자)부터 arrayB의 원소들이 나눠지는지 확인하고, 모두 나눠지지 않는다면 현재 값이 가장 큰 값이니까 answer로 업데이트한다
- 위의 과정을 listB와 arrayA에 대해서도 하여 그 중 가장 큰 값을 반환한다
사실 쉬운 문제였는데 뇌에 힘을 빼고 풀면 방황할 수 있는 문제였따..
(맞아,, 내 얘기야,,,^_ㅠ)
자바 코드)
import java.util.*;
class Solution {
public int solution(int[] arrayA, int[] arrayB) {
int answer = 0;
List<Integer> listA = getDivisors(Arrays.stream(arrayA).distinct().toArray());
List<Integer> listB = getDivisors(Arrays.stream(arrayB).distinct().toArray());
for(int i=listA.size()-1;i>=0;i--) {
int a = listA.get(i);
Boolean check = true;
for(int b : arrayB) {
if(b%a==0) {
check = false;
break;
}
}
if(check) {
answer = a;
break;
}
}
for(int j=listB.size()-1;j>=0;j--) {
int b = listB.get(j);
Boolean check = true;
for(int a : arrayA) {
if(a%b==0) {
check = false;
break;
}
}
if(answer<b && check) {
answer = b;
break;
}
}
return answer;
}
// 배열의 원소를 모두 나눌 수 있는 수를 반환하는 메소드
public List<Integer> getDivisors(int[] array) {
List<Integer> list = new ArrayList<>();
Arrays.sort(array);
int min = array[0];
for(int i=2;i<=min;i++) {
Boolean check = true;
for(int num : array) {
if(num%i!=0) {
check=false;
break;
}
}
if(check) {
list.add(i);
}
}
return list;
}
}
728x90
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[연습문제] 롤케이크 자르기 - JAVA (0) | 2022.11.27 |
---|---|
[카카오 인턴] 경주로 건설 - JAVA (0) | 2022.11.26 |
[연습문제] 혼자 놀기의 달인 - JAVA (0) | 2022.11.02 |
[연습문제] 야근 지수 - JAVA (0) | 2022.11.02 |
[연습문제] 최고의 집합 - JAVA (0) | 2022.11.01 |
댓글